Библиотека Nodriver
В этом посте я покажу пример парсинга с использованием библиотеки NoDriver.
Реклама
Те, кто занимается парсингом сайтов не раз сталкивались с проблемами "палящегося" Selenum'а или необходимости скачать новый вебдрайвер для браузера, также Selenum достаточно медленный. Решение всех этих проблем предлагает библиотека Nodriver
.
Nodriver
— это библиотека для высокопроизводительного веб-скрапинга и автоматизации, не использующая традиционные методы WebDriver или Selenium. Она обходит защитные меры, такие как Captcha и Cloudflare, напрямую взаимодействуя с браузером и поддерживая асинхронные операции для повышения скорости. Библиотека проста в использовании благодаря продуманным настройкам по умолчанию, но также позволяет продвинутым пользователям настраивать её под свои задачи.
Репозиторий библиотеки: https://github.com/ultrafunkamsterdam/nodriver
Установка библиотеки:
Для установки достаточно выполнить команду:
pip install nodriver
Пример получения изображений из Яндекс Картинок:
import asyncio
from pathlib import Path
import httpx
import nodriver as uc
async def main():
url = 'https://yandex.ru/images/search?from=tabbar&text=котики&isize=eq&iw=1920&ih=1080'
browser = await uc.start()
page = await browser.get(url)
elems = await page.select_all('.JustifierRowLayout-Item')
for i, elem in enumerate(elems):
a = await elem.query_selector('a')
image_page = await browser.get(f"https://yandex.ru{a.attrs.get('href')}", new_window=True)
image = await image_page.select('.MMImage-Origin')
file_resp = httpx.get("https:" + image.attrs.get('src'))
with open(Path('downloads') / f"{i}.png", 'wb') as file:
file.write(file_resp.content)
await image_page.close()
asyncio.run(main())
Создаём асинхронную функцию main
.
В ней указываем url
страницы с которой начнём парсинг.
Затем создаём экземпляр браузера и открываем в нём страницу.
Ищем нужные элементы, в данном случае содержащие превьюшки изображений.
Далее, итерируясь по полученным элементам, находим в них ссылки на страницы изображений и открываем в новом окне.
Затем, находим само изображение и скачиваем его при помощи httpx.
Данный код всего лишь пример работы с библиотекой, которая упростит жизнь разработчику парсеров.
Все статьи