scraping libreria from python selenium selenium-webdriver web-scraping scrapy

python - libreria - selenio con scrapy para página dinámica



selenium web scraping python (1)

Realmente depende de cómo necesita raspar el sitio y cómo y qué datos desea obtener.

Aquí hay un ejemplo de cómo puedes seguir la paginación en eBay usando Scrapy + Selenium :

import scrapy from selenium import webdriver class ProductSpider(scrapy.Spider): name = "product_spider" allowed_domains = [''ebay.com''] start_urls = [''http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40''] def __init__(self): self.driver = webdriver.Firefox() def parse(self, response): self.driver.get(response.url) while True: next = self.driver.find_element_by_xpath(''//td[@class="pagn-next"]/a'') try: next.click() # get the data and write it to scrapy items except: break self.driver.close()

Aquí hay algunos ejemplos de "arañas de selenio":

También hay una alternativa a tener que usar Selenium con Scrapy . En algunos casos, utilizar el middleware ScrapyJS es suficiente para manejar las partes dinámicas de una página. Muestra de uso en el mundo real:

Estoy tratando de raspar información del producto de una página web, usando scrapy. La página web que se va a raspar tiene este aspecto:

  • comienza con una página de lista de productos con 10 productos
  • un clic en el botón "siguiente" carga los siguientes 10 productos (la URL no cambia entre las dos páginas)
  • utilizo LinkExtractor para seguir cada enlace de producto en la página del producto y obtener toda la información que necesito

Traté de replicar el siguiente botón-ajax-call pero no puedo trabajar, así que estoy probando el selenio. Puedo ejecutar el webdriver de selenio en un script separado, pero no sé cómo integrarlo con scrapy. ¿Dónde debo poner la parte de selenio en mi araña de scrapy?

Mi araña es bastante estándar, como la siguiente:

class ProductSpider(CrawlSpider): name = "product_spider" allowed_domains = [''example.com''] start_urls = [''http://example.com/shanghai''] rules = [ Rule(SgmlLinkExtractor(restrict_xpaths=''//div[@id="productList"]//dl[@class="t2"]//dt''), callback=''parse_product''), ] def parse_product(self, response): self.log("parsing product %s" %response.url, level=INFO) hxs = HtmlXPathSelector(response) # actual data follows

Cualquier idea es apreciada. ¡Gracias!