Как очистить несколько страниц результатов поиска с Beautiful Soup - PullRequest
0 голосов
/ 26 февраля 2020

Со следующим URL:

https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=Celtics&BeginDate=&EndDate=&PlayerMovementChkBx=yes&Submit=Search

Я пытаюсь отсканировать результаты таблицы, представленной здесь. Проблема в том, что, независимо от того, что, результаты поиска ограничены 25 / страницу, и, как вы можете видеть, тысячи результатов на нескольких страницах.

Я попытался изменить дату начала и окончания, но безрезультатно.

Когда я чищу красивым супом, я могу только почистить страницу 1 результатов, тогда она прекращается. Чего мне не хватает, чтобы соскрести (в данном случае) все 85 страниц результатов? (и - мой код успешен, но возвращает только скрап со страницы 1 результатов).

Вот мой код:

blah = []

html = 'https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=Celticss&PlayerMovementChkBx=yes&submit=Search&start=0'
webpage = requests.get(html)
content = webpage.content
soup = BeautifulSoup(content)

for item in soup.find_all('tr'):
    for value in item.find_all('td'):
        gm = value.text
        blah.append(gm)

1 Ответ

1 голос
/ 26 февраля 2020

Объявление do l oop вокруг всего вашего фрагмента, который очищает одну из таблиц, и инкриминирование URL-адреса на 25. В приведенном ниже фрагменте я только что создал переменную counter, которая изначально равна нулю, и получает инкремент по 25 для каждого l oop. Код сломает l oop, когда ответ на запрос перестанет действовать, что означает, что вы нажали ошибку или достигли конца результатов поиска. Вы можете изменить это утверждение, чтобы оно ломалось, если оно 404, или вывести ошибку, например, c.

Код ниже не тестировался, просто демонстрация моей концепции.

blah = []

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

counter = 0

while True: 
    url += str(counter)
    webpage = requests.get(url)

    if webpage.status_code != 200:
        break

    content = webpage.content
    soup = BeautifulSoup(content)

    for item in soup.find_all('tr'):
        for value in item.find_all('td'):
            gm = value.text
            blah.append(gm)

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