Cat

Библиотека Nodriver

В этом посте я покажу пример парсинга с использованием библиотеки NoDriver.

Tips & Tricks proDream 26 Август 2024 Просмотров: 252

Те, кто занимается парсингом сайтов не раз сталкивались с проблемами "палящегося" 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.

Данный код всего лишь пример работы с библиотекой, которая упростит жизнь разработчику парсеров.

Автор

    Нет комментариев

    Реклама