Selenio con scrapy para página dinámica.

Estoy tratando de raspar la información del producto de una página web, usando scrapy. Mi página web para ser raspada se ve así:

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

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

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!

Realmente depende de cómo necesite 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 selenium”:


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

  • Raspando el contenido dynamic usando python-Scrapy