Не получается спарсить сайт с помощью requests на Python
я создаю telegram-бота который будет отправлять актуальные скидки в Читай-городе. При попытке спарсить (с помощью requests и beautifulsoup4) данные с сайта
import requests
from bs4 import BeautifulSoup as BS
url ='https://m.chitai-gorod.ru/actions/'
headers = {
'Accept': "*/*",
'User-Agent': 'Mozilla/... (Windows NT 10.0; Win64; x64) AppleWebKit/... (KHTML, like Gecko) Chrome/... Safari/...'
}
req = requests.get(url, headers=headers)
src = req.text
print(src)
я получаю вот это:
<html style="height:100%">
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script type="text/javascript" src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3"></script>
</head>
<body style="margin:0px;height:100%">
<iframe id="main-iframe"
src="/_Incapsula_Resource?CWUDNSAI=42&xinfo=11-362342621-0%20NNNN%20RT%281632739930069%20142%29%20q%280%20-1%20-1%200%29%20r%280%20-1%29%20B10%2814%2c0%2c0%29%20U5&incident_id=379000621078847674-1513994783821598603&edet=10&cinfo=0e000000a609&rpinfo=0&mth=GET"
frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">
Request unsuccessful. Incapsula incident ID: 379000621078847674-1513994783821598603
</iframe>
</body>
</html>
Что с этим делать?
Ответы (1 шт):
Мне жаль Вас расстраивать, но спарсить сайт при помощи BS так, как вы это делаете - не получится.
Сайт не отдаёт Вам страницу, которую Вы видите.
Весь фокус - в строчке
<script type="text/javascript" src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3"></script>
То есть, при загрузке страницы Вам грузится js-клиент, который запускатся в Вашем браузере, обращается к серверу, запрашивает с него данные и потом уже заполняет этими данными страницу.
Увидеть весь этот процесс на простейшем уровне можно, просто нажав F12 и пользуясь отладкой в браузере.
Зато есть и хорошая новость: можно "подсмотреть" за протоколом, по котрому js запрашивает у сервера информацию, и послать со своей стороны точно такие же запросы. И вместо того, чтобы парсить Html и мешанину вложенных div-ов - получить чистенький и аккуратненький json-чик с готовым ответом на Ваш вопрос о скидках.