Как обойти защиту от парсинга?
Этот код должен выводить все, что есть в body. Но похоже у этого сайта какая-то защита от парсинга.
import requests
from bs4 import BeautifulSoup
URL = 'https://edadeal.ru/kazan'
HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/86.0.4240.185 YaBrowser/20.11.2.78 Yowser/2.5 Safari/537.36', 'accept': '*/*'}
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
print(BeautifulSoup(html, 'html.parser'))
def parse():
html = get_html(URL)
if html.status_code == 200:
get_content(html.text)
else:
print('Error')
parse()
В результате, всё, что спарсилось от body, это:
<div id="root"></div>
Ответы (1 шт):
Автор решения: Vlad Safonichev
→ Ссылка
Дело в том, что данный сайт действительно загружает только <div id="root"></div>, такие приложения называются - SPA (single page application). Весь остальной контент и DOM дерево создается с помощью JS скриптов.
Чтобы получить полный код страницы после загрузки всех JS скриптов нужно использовать Selenium, а вот после загрузки уже можно передать код страницы на парсинг в BeautifulSoup.
Вот есть статья с примером по парсингу динамических сайтов.