Beautiful Soup возвращает язык сценариев вместо HTML

Я написал программу на Python для сбора данных с пары торговых сайтов, которая до недавнего времени работала нормально на обоих.

URL1 - https://www.auchan.pt/pt/alimentacao/alimentacao-bebe-e-crianca/papa-e-farinha-lactea/farinha-cerelac-lactea-500g/70511.html

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

изображение

Я, очевидно, новичок, но, похоже, это какая-то защита от списания; я могу что-нибудь сделать?

Спасибо!

Если я открываю веб-страницу в браузере, она выглядит хорошо. Это потому, что ваш браузер обрабатывает JavaScript на странице. Но requests не может обрабатывать javascript.

John Gordon 14.04.2024 20:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

«Язык сценариев», который вы видите, — это свернутый 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-код веб-страницы.

Rodrigo Monteiro 14.04.2024 22:13

@RodrigoMonteiro, как оказалось, эта проблема уже встречалась раньше. Пустое тело на самом деле не заполняется JS, а скорее эта страница является страницей ограничения скорости. Вероятно, вам следует пересмотреть возможность парсинга этого веб-сайта, так как похоже, что он не требует или не облегчает парсинг.

kggn 14.04.2024 23:34

Другие вопросы по теме