Как очистить веб-страницу, когда значение смещения страницы никогда не заканчивается

#python #python-3.x #web-scraping #beautifulsoup

#питон #python-3.x #очистка веб-страницы #beautifulsoup #python

Вопрос:

Я пытаюсь соскрести данные игрока сhttps://sofifa.com использование BeautifulSoup. На каждой странице отображается 60 игроков, и поэтому я использую параметр запроса смещения (например https://sofifa.com/players?offset=60 показывает 2-ю страницу), чтобы получить доступ ко всей информации игрока.

Одна вещь, которую я заметил, это то, что значение смещения никогда не заканчивается (т. Е. Независимо от того, насколько велико значение смещения, которое я предоставляю, оно всегда показывает мне страницу). В частности, я заметил, что для смещения > 20000 или около того он всегда отображает 1-ю страницу (по сути, после исчерпания всех игроков он как бы переходит на 1-ю страницу и всегда отображает это для всех последующих более высоких значений смещения). Попробуйте с https://sofifa.com/players?offset=20000000 чтобы получить представление о том, что я имею в виду.

Я хочу знать, есть ли какой-либо способ, которым я могу программно узнать последнее «допустимое» значение смещения; после чего я обязательно верну 1-ю страницу обратно. Это поможет мне решить, когда я дойду до конца набора данных.

В настоящее время это то, как я соскребаю:

 for offset in range(0, 20000, 60):
  try:
    print("Processing page at offset "   str(offset))
    sofifa_url = "https://sofifa.com/players?offset="   str(offset)
    # start scraping the page
    :
    :
  except Exception as e:
    print("Exception occured: "   str(e))
    continue
  

Комментарии:

1. Вроде очевидных / наивных вопросов, но при получении последовательных смещений почему бы вам не создать условие остановки для содержимого? Здесь каждая запись должна быть уникальной, если я хорошо понимаю.

2. Одним из способов сделать это было бы проверить, есть ли кнопка «Далее», и прекратить очистку, когда вы дойдете до последней страницы.

3. @Maciek 2 вещи: контент на этом веб-сайте является динамическим. Регулярно обновляется. Также отслеживание очищенного содержимого для сопоставления кажется немного трудоемким.

4. @baduker Вместо кнопки «Далее» на этом веб-сайте кнопка «предыдущий» кажется лучшим способом (поскольку на последней странице также есть кнопка «Далее», но на 1-й странице нет «предыдущего». Я осознаю это как возможное решение, но хочу посмотреть, есть ли более сложные варианты.

5. @knightcool: если содержимое изменчиво, то я полагаю, что единственное, что вы можете сделать, это загрузить его снимок в определенный момент времени. В таком случае было бы достаточно отследить только одну (первую) запись, чтобы обнаружить, что смещение перевернулось. В противном случае, если вы хотите, чтобы содержимое всегда обновлялось, вам нужно было бы постоянно сравнивать загруженную версию с онлайн-версией, что, конечно, было бы намного сложнее, чем сравнивать только одну запись в момент загрузки.