Я написал программу на Python для сбора данных с пары торговых сайтов, которая до недавнего времени работала нормально на обоих.
URL2 - https://www.contente.pt/produto/papa-infantil-farinha-lactea-6m-cerelac-2004388.html
Я использую следующий простой код:
import requests
from bs4 import BeautifulSoup
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# ... and then i have my code to parse stuff...
Проблема в том, что на URL1 все хорошо и модно, и если я печатаю (суп), я получаю HTML-код страницы, как показано в исходном коде страницы, с помощью браузера. Но на URL2 я получаю что-то похожее на код сценария (см. прикрепленное изображение), и, конечно же, мой код анализа терпит неудачу, потому что он не может найти элементы. Если я открою веб-страницу в браузере, она будет выглядеть хорошо, и я смогу просмотреть исходный код, как и ожидалось.
Я, очевидно, новичок, но, похоже, это какая-то защита от списания; я могу что-нибудь сделать?
Спасибо!
«Язык сценариев», который вы видите, — это свернутый JS. Я предполагаю, что он отправляет запрос на центральный сервер на Континенте, а затем заполняет страницу. Самый простой способ сделать это — использовать chromedriver
, который выполняет код и заполняет страницу, работая почти так же, как в браузере.
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Chrome()
driver.get("https://www.continente.pt/produto/papa-infantil-farinha-lactea-6m-cerelac-2004388.html")
soup = BeautifulSoup(driver.page_source, "html.parser")
# ...
Я попробовал только тот простой код, который вы любезно предоставили, и добавил «печать (суп)». Не уверен, что вы проверяли, но результаты те же - я все еще получаю javascript, а не настоящий HTML-код веб-страницы.
@RodrigoMonteiro, как оказалось, эта проблема уже встречалась раньше. Пустое тело на самом деле не заполняется JS, а скорее эта страница является страницей ограничения скорости. Вероятно, вам следует пересмотреть возможность парсинга этого веб-сайта, так как похоже, что он не требует или не облегчает парсинг.
Если я открываю веб-страницу в браузере, она выглядит хорошо. Это потому, что ваш браузер обрабатывает JavaScript на странице. Но
requests
не может обрабатывать javascript.