Для циклов при использовании селена для webscraping Python - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь отсканировать информацию со следующего веб-сайта: https://www.axial.net/forum/companies/united-states-family-offices/

Я пытаюсь очистить описание для каждого семейного офиса, поэтому "https://www.axial.net/forum/companies/united-states-family-offices/ "+ insert_company_name" - это страницы, которые мне нужно почистить.

Поэтому я написал следующий код для проверки программы на одной странице:

from bs4 import BeautifulSoup as soup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('insert_path_here/chromedriver')
driver.get("https://network.axial.net/company/ansaco-llp")
page_source = driver.page_source
soup2 = soup(page_source,"html.parser")
soup2.findAll('axl-teaser-description')[0].text

Это работает для на одной странице, пока в описании нет кнопки «показать полное описание». Я сохраню это для другого вопроса.

Я написал следующее l oop:

#Note: Lst2 has all the names for the companies. I made sure they match the webpage
lst3=[]
for key in lst2[1:]:
    driver.get("https://network.axial.net/company/"+key.lower())
    page_source = driver.page_source


    for handle in driver.window_handles:
         driver.switch_to.window(handle)
    word_soup = soup(page_source,"html.parser")



    if word_soup.findAll('axl-teaser-description') == []:
        lst3.append('null')
    else:
        c = word_soup.findAll('axl-teaser-description')[0].text
        lst3.append(c)
print(lst3)

Когда я запускаю l oop, все значения отображаются как "нулевые", даже те, которые не имеют кнопок "click for full description".

Я редактировал l oop вместо этого вывести «word_soup», и страница будет другой, чем если бы я запустил ее без al oop и не имел текста описания.

Я не понимаю, почему al oop вызовет что, но, видимо, это так. Кто-нибудь знает, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Найденное решение. приостановить программу на 3 секунды после driver.get:

import time
lst3=[]
for key in lst2[1:]:
    driver.get("https://network.axial.net/company/"+key.lower())
    time.sleep(3)
    page_source = driver.page_source



    word_soup = soup(page_source,"html.parser")



    if word_soup.findAll('axl-teaser-description') == []:
        lst3.append('null')
    else:
        c = word_soup.findAll('axl-teaser-description')[0].text
        lst3.append(c)
print(lst3)
0 голосов
/ 17 апреля 2020

Я вижу, что страница использует javascript для генерации текста, что означает, что он не отображается в источнике страницы, что странно, но нормально. Я не совсем понимаю, почему вы только перебираете и переключаетесь на все открытые экземпляры Selenium, но вы определенно не найдете описания на странице source / beautifulsoup.

Честно говоря, я если бы вы могли, я лично искал бы лучший сайт, иначе вам придется попробовать его с селеном, который неэффективен и ужасен.

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