«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как можно интегрировать Selenium со Scrapy для очистки динамических страниц?

Как можно интегрировать Selenium со Scrapy для очистки динамических страниц?

Опубликовано 19 ноября 2024 г.
Просматривать:731

How can Selenium be Integrated with Scrapy to Scrape Dynamic Pages?

Интеграция Selenium со Scrapy для динамических страниц

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

Интеграция Selenium в Scrapy Spider

Чтобы интегрировать Selenium в Scrapy Spider, инициализируйте Selenium WebDriver в Scrapy Spider. __init__ метод.

import scrapy
from selenium import webdriver

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    
    def __init__(self):
        self.driver = webdriver.Firefox()

Затем перейдите к URL-адресу в методе синтаксического анализа и используйте методы Selenium для взаимодействия со страницей.

def parse(self, response):
    self.driver.get(response.url)
    next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a')
    next.click()

Используя этот подход, вы можете моделировать взаимодействие с пользователем, перемещаться по динамическим страницам и извлекать нужные данные.

Альтернатива использованию Selenium со Scrapy

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

# scrapy.cfg
DOWNLOADER_MIDDLEWARES = {
    'scrapyjs.SplashMiddleware': 580,
}
# my_spider.py
class MySpider(scrapy.Spider):
    name = 'my_spider'
    start_urls = ['http://example.com/dynamic']
    
    def parse(self, response):
        script = 'function() { return document.querySelectorAll("div.product-info").length; }'
        return Request(url=response.url, callback=self.parse_product, meta={'render_javascript': True, 'javascript': script})

    def parse_product(self, response):
        product_count = int(response.xpath('//*[@data-scrapy-meta]/text()').extract_first())

Этот подход использует рендеринг JavaScript с использованием ScrapyJS для получения желаемых данных без используя Selenium.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3