Как исправить, что BeautifulSoup / selenium работают на одном и том же сайте для некоторых страниц, но не для всех? - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь очистить каждую страницу: https://www.prosportstransactions.com/football/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search&start=0

Сейчас у меня есть код, который итеративно меняет URL.Затем URL передается в драйвер селена для захвата содержимого HTML.Затем содержимое помещается в BeautifulSoup для обработки.Моя проблема в том, что я получаю следующее сообщение случайным образом (происходит случайно на разных страницах, что приводит к сбою программы. Нет постоянной страницы, на которой происходит сбой):

Traceback (most recent call last):
  File "scrape.py", line 89, in <module>
   i, i + 5000)
  File "scrape.py", line 37, in scrapeWebsite
    extractedInfo = info.findAll("td")
AttributeError: 'NoneType' object has no attribute 'findAll'

i, i + 5000 используется дляцикл для итеративного обновления страниц, так что это не важно.

Вот код, который выполняет захват HTML:

driver = webdriver.Chrome(executable_path='/Users/Downloads/chromedriver')
print(start, stop)


madeDict = {"Date": [], "Team": [], "Name": [], "Relinquished": [], "Notes": []}

#for i in range(0, 214025, 25):
for i in range(start, stop, 25):
    print("Current Page: " + str(i))
    currUrl = url + str(i)
    driver.get(currUrl)
    driver.implicitly_wait(100
    soupPage = BeautifulSoup(driver.page_source, 'html.parser')
    #page = urllib2.urlopen(currUrl)
    #soupPage = BeautifulSoup(page, 'html.parser')

    # #Sleep the program to ensure page is fully loaded
    # time.sleep(1)

    info = soupPage.find("table", attrs={'class': 'datatable center'})
    extractedInfo = info.findAll("td")

Я предполагаю, что страница не завершает загрузку, поэтому, когда она пытаетсязахватить содержимое, теги могут не быть там.Однако я подумал, что Selenium предотвратил эту проблему с динамической загрузкой веб-страниц, чтобы обеспечить полную загрузку страницы до того, как BeautifulSoup получит информацию.Я просматривал другие посты, и некоторые говорили, что мне нужно подождать, пока программа динамически загрузит страницу, но я попытался это сделать, и та же ошибка.

1 Ответ

0 голосов
/ 17 мая 2019

Выполнено без селена, вместо этого используются запросы.

import requests
from bs4 import BeautifulSoup

url='https://www.prosportstransactions.com/football/Search/SearchResults.php?Player=&Team=&BeginDate=&EndDate=&PlayerMovementChkBx=yes&submit=Search&start='

for i in range(0, 214025, 25):
    print("Current Page: " + str(i))
    r=requests.get(url + str(i))
    soup = BeautifulSoup(r.content)
    info = soup.find("table", attrs={'class': 'datatable center'})
    extractedInfo = info.findAll("td")
    print(extractedInfo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...