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.
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