не получает ссылку href на селен python bs4 - PullRequest
0 голосов
/ 08 мая 2020

Этот класс ("class": "contenu") содержит ссылку href. Я пробовал .get ('href'), но не работал. вот мой полный код

    browser.get("https://www.usine-digitale.fr/annuaire-start-up/")

    # Wait 20 seconds for page to load
    timeout = 20
    try:
        WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='texteContenu3']")))
    except TimeoutException:
        print("Timed out waiting for page to load")
        browser.quit()

    soup = BeautifulSoup(browser.page_source, "html.parser")

    product_items = soup.find_all("a",{"class":"contenu"})
    for item in product_items:
        item_url = item.find("a",{"class":"contenu"}).get('href')
        print(item_url)


        from csv import writer
        def AddToCSV(List):
                with open("Output.csv", "a+", newline='') as output_file:
                    csv_writer = writer(output_file)
                    csv_writer.writerow(List)


        # this can be used within your for loop
        row_list = [item_url]
        AddToCSV(row_list)


    browser.quit() 

получение этого сообщения об ошибке

    item_url = item.find("a",{"class":"contenu"}).get('href')
AttributeError: 'NoneType' object has no attribute 'get'

, но когда я запускаю однострочный код one python shell, я получаю href

>>> soup.find("a",{"class":"contenu"}).get('href')
'/annuaire-start-up/ausha-by-icreo,941436'

почему он не работает с моим полным кодом?

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Вы уже вызвали find_all(). Просто повторите и получите href.

soup = BeautifulSoup(browser.page_source, "html.parser")
product_items = soup.find_all("a",{"class":"contenu"})
for item in product_items:
        item_url = item.get('href')
        print(item_url)

Вывод :

/annuaire-start-up/telegrafik,941441
/annuaire-start-up/ausha-by-icreo,941436
/annuaire-start-up/gamersorigin,962251
/annuaire-start-up/fabulabox,962231
/annuaire-start-up/nyctale,962226
/annuaire-start-up/lizee,962221
/annuaire-start-up/isybot,961726
/annuaire-start-up/sarus-technologies,961716
/annuaire-start-up/beeldi,941426
/annuaire-start-up/energie-ip,961706
/annuaire-start-up/easyblue,961421
/annuaire-start-up/braam,940806
/annuaire-start-up/spareka,961311
/annuaire-start-up/chance,961306
/annuaire-start-up/cosmoz,961296
/annuaire-start-up/adrenalead,961291
/annuaire-start-up/demand-side-instruments,940786
/annuaire-start-up/ividata,960926
/annuaire-start-up/tekyn,960921
/annuaire-start-up/siga,960916
0 голосов
/ 08 мая 2020

В вашем примере, который работает, вы ищете элемент a в soup. В вашем коде вы найдете все совпадающие элементы a в soup, а затем без необходимости ищете другой в link. Измените link.find... на link.get('href').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...