Парсинг веб-сайтов – ценный метод извлечения данных с веб-сайтов. Scrapy — это популярная платформа Python, используемая для парсинга веб-страниц, предоставляющая мощные инструменты и гибкость. Однако при работе с динамическими веб-сайтами, которые в значительной степени полагаются на JavaScript для рендеринга контента, традиционные методы очистки могут оказаться неэффективными. Вот тут-то и пригодится Scrapy Splash. В этой статье мы рассмотрим различные методы и примеры кода, позволяющие использовать Scrapy Splash для эффективного парсинга веб-страниц с рендерингом JavaScript.
-
Установка Scrapy Splash:
Чтобы начать, нам нужно установить Scrapy Splash. Откройте командную строку или терминал и выполните следующую команду:pip install scrapy-splash -
Настройка промежуточного программного обеспечения Splash:
Для работы Scrapy Splash требуется промежуточное программное обеспечение. Добавьте следующий код в файл settings.py вашего проекта Scrapy:DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } -
Настройка Scrapy Splash:
Далее нам нужно настроить Scrapy Splash. Добавьте следующий код в файл settings.py вашего проекта Scrapy:SPLASH_URL = 'http://localhost:8050' DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage' -
Написание Scrapy Splash Spider:
Теперь давайте создадим Scrapy Splash Spider. Этот паук будет использовать Scrapy Splash для рендеринга JavaScript и извлечения данных с веб-сайта. Вот пример:import scrapy from scrapy_splash import SplashRequest class MySpider(scrapy.Spider): name = 'my_spider' def start_requests(self): yield SplashRequest(url='http://example.com', callback=self.parse) def parse(self, response): # Extract data from the rendered page # ... # Follow links or perform further scraping # ... -
Передача аргументов в Scrapy Splash:
Вы можете передавать аргументы в Scrapy Splash для большей настройки. Вот пример передачи аргументов в SplashRequest:yield SplashRequest( url='http://example.com', callback=self.parse, endpoint='render.json', args={'wait': 0.5} ) -
Использование сценариев Lua:
Scrapy Splash позволяет выполнять собственные сценарии Lua для более сложных задач очистки. Вот пример использования сценария Lua для нажатия кнопки и загрузки дополнительного контента:script = ''' function main(splash, args) assert(splash:go(args.url)) assert(splash:wait(0.5)) assert(splash:runjs("document.getElementById('load-more-button').click()")) assert(splash:wait(0.5)) return { html = splash:html(), cookies = splash:get_cookies(), } end ''' yield SplashRequest( url='http://example.com', callback=self.parse, endpoint='execute', args={'lua_source': script} )
Scrapy Splash – мощный инструмент для очистки веб-страниц, особенно при работе с веб-сайтами, которые в значительной степени полагаются на рендеринг JavaScript. В этой статье мы рассмотрели различные методы и предоставили примеры кода, которые помогут вам эффективно использовать Scrapy Splash. Включив рендеринг JavaScript в рабочий процесс парсинга, вы сможете более эффективно и точно извлекать данные с динамических веб-сайтов.