#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: если содержимое изменчиво, то я полагаю, что единственное, что вы можете сделать, это загрузить его снимок в определенный момент времени. В таком случае было бы достаточно отследить только одну (первую) запись, чтобы обнаружить, что смещение перевернулось. В противном случае, если вы хотите, чтобы содержимое всегда обновлялось, вам нужно было бы постоянно сравнивать загруженную версию с онлайн-версией, что, конечно, было бы намного сложнее, чем сравнивать только одну запись в момент загрузки.