"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se puede integrar Selenium con Scrapy para raspar páginas dinámicas?

¿Cómo se puede integrar Selenium con Scrapy para raspar páginas dinámicas?

Publicado el 2024-11-19
Navegar:919

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

Integración de Selenium con Scrapy para páginas dinámicas

Al extraer sitios web complejos con contenido dinámico, Selenium, un marco de automatización web, se puede integrar con Scrapy, un framework de web scraping, para superar desafíos.

Integrando Selenium en un Scrapy Spider

Para integrar Selenium en su araña Scrapy, inicialice Selenium WebDriver dentro del método __init__ de la araña.

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()

A continuación, navegue hasta la URL dentro del método de análisis y utilice métodos de Selenium para interactuar con la página.

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

Al utilizar este enfoque, puede simular las interacciones del usuario, navegar por páginas dinámicas y extraer los datos deseados.

Alternativa al uso de Selenium con Scrapy

En ciertos escenarios, usar el middleware ScrapyJS puede ser suficiente para manejar partes dinámicas de una página sin depender de Selenium. Por ejemplo, consulte el siguiente ejemplo:

# 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())

Este enfoque emplea la representación de JavaScript utilizando ScrapyJS para obtener los datos deseados sin usando selenio.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3