Как парсить динамические сайты на python?

Пользователь

от gussie.jones , в категории: Python , 3 года назад

Как парсить динамические сайты на python?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от NicolasSsh , 3 года назад

@gussie.jones  Для парсинга динамических сайтов можно прибегнуть к двум вариантам : Парсинг по запросам (Они не всегда есть) и парсинг с помощью эмуляции браузера (зачастую используют библиотеку selenium с браузерным ядром)


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
from config import user_agent
from time import sleep

options = webdriver.ChromeOptions() # Устанавливаем настройки для эмулируемого браузера
options.add_argument("user-agent={user_agent}")
options.add_argument("--headless") # Режим, при котором окно браузера будет работать в фоновом режиме

driver = webdriver.Chrome(executable_path="chromedriver.exe", options=options) # Создаем экземпляр класса Chrome с инициализируемым путём и настройками

driver.get("https://dropcode.ru") # Открываем страницу в драйвере

sleep(2) # Ждём, когда прогрузиться страница

html = driver.page_source # Получаем html-страницу со всеми прогруженными данными
# Теперь данную html-страницу можно распарсить, используя обычный BeautifulSoup

driver.close()
driver.quit() # Закрываем драйвер

Пользователь

от hobart.rath , 2 года назад

@gussie.jones 

Существует несколько способов парсинга динамических сайтов на Python, но в целом они основываются на использовании библиотек для работы с веб-страницами.


Один из наиболее распространенных методов - использование библиотеки Selenium WebDriver. Она позволяет запускать браузер и контролировать его действия, что позволяет парсить динамические страницы, загружать данные, отправлять запросы и т.д. Пример кода, который загружает страницу и получает ее содержимое в Python с помощью Selenium, может выглядеть так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from selenium import webdriver

# создаем экземпляр WebDriver
driver = webdriver.Chrome()

# загружаем страницу
driver.get("https://www.example.com")

# получаем содержимое страницы
page_content = driver.page_source

# закрываем браузер
driver.quit()


Также для парсинга динамических сайтов можно использовать библиотеки, которые работают с AJAX запросами, например, requests-html или scrapy. Они позволяют отправлять запросы к серверу, получать данные и обрабатывать их.


Пример использования requests-html для загрузки страницы и получения содержимого может выглядеть так:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from requests_html import HTMLSession

# создаем сессию
session = HTMLSession()

# загружаем страницу
response = session.get('https://www.example.com')

# получаем содержимое страницы
page_content = response.html.html

# закрываем сессию
session.close()


Важно отметить, что при парсинге динамических сайтов могут возникать проблемы с загрузкой контента, так как данные могут быть загружены асинхронно. Поэтому необходимо быть готовым к такой возможности и использовать соответствующие техники для обработки загрузки контента.