Estoy usando scrapy para rastrear un sitio. El sitio tiene 15 listados por página y luego tiene un botón siguiente. Me estoy encontrando con un problema donde se llama a mi Solicitud del siguiente enlace antes de terminar de analizar todas mis listas en tramitación. Aquí está el código para mi araña:rastreo recursivo con Python y Scrapy
class MySpider(CrawlSpider):
name = 'mysite.com'
allowed_domains = ['mysite.com']
start_url = 'http://www.mysite.com/'
def start_requests(self):
return [Request(self.start_url, callback=self.parse_listings)]
def parse_listings(self, response):
hxs = HtmlXPathSelector(response)
listings = hxs.select('...')
for listing in listings:
il = MySiteLoader(selector=listing)
il.add_xpath('Title', '...')
il.add_xpath('Link', '...')
item = il.load_item()
listing_url = listing.select('...').extract()
if listing_url:
yield Request(urlparse.urljoin(response.url, listing_url[0]),
meta={'item': item},
callback=self.parse_listing_details)
next_page_url = hxs.select('descendant::div[@id="pagination"]/'
'div[@class="next-link"]/a/@href').extract()
if next_page_url:
yield Request(urlparse.urljoin(response.url, next_page_url[0]),
callback=self.parse_listings)
def parse_listing_details(self, response):
hxs = HtmlXPathSelector(response)
item = response.request.meta['item']
details = hxs.select('...')
il = MySiteLoader(selector=details, item=item)
il.add_xpath('Posted_on_Date', '...')
il.add_xpath('Description', '...')
return il.load_item()
Estas líneas son el problema. Como dije antes, se están ejecutando antes de que la araña haya terminado de rastrear la página actual. En cada página del sitio, esto causa que solo 3 de 15 de mis listas se envíen a la canalización.
if next_page_url:
yield Request(urlparse.urljoin(response.url, next_page_url[0]),
callback=self.parse_listings)
Esta es mi primera araña y podría ser una falla de diseño de mi parte, ¿hay una mejor manera de hacerlo?
Hola. ¿Tienes el código funcionando? Me gustaría que la araña se arrastre a la página siguiente, pero parece que no puede encontrar ningún tutorial sobre ella. Tu código de trabajo podría ser útil. ¡Gracias! – Victor
No, no. Incluso me puse en contacto con los creadores de scrapy, pero no fueron de ayuda. – imns
Acabo de hacer una búsqueda con diferentes palabras clave, y encontré esto: http://abuhijleh.net/2011/02/13/guide-scrape-multi-pages-content-with-scrapy/ Espero que ayude. Aún no he escrito mi propio rastreador. Si he hecho algo, publicaré algo. – Victor