Как обойти защиту от парсинга?

Этот код должен выводить все, что есть в 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.

Вот есть статья с примером по парсингу динамических сайтов.

→ Ссылка