tutorial robotstxt_obey example default_request_headers crawl hyperlink callback scrapy

hyperlink - robotstxt_obey - scrapy tutorial



Scrapy: ¿Seguir el enlace para obtener datos adicionales del artículo? (3)

No tengo un problema de código específico. No estoy seguro de cómo abordar el siguiente problema logísticamente con el marco de Scrapy:

La estructura de los datos que quiero raspar suele ser una fila de tabla para cada elemento. Bastante sencillo, ¿verdad?

En última instancia, quiero eliminar el título , la fecha de vencimiento y los detalles de cada fila. El título y la fecha de vencimiento están disponibles de inmediato en la página ...

PERO los Detalles en sí mismos no están en la tabla, sino más bien, un enlace a la página que contiene los detalles (si eso no tiene sentido aquí hay una tabla):

|-------------------------------------------------| | Title | Due Date | |-------------------------------------------------| | Job Title (Clickable Link) | 1/1/2012 | | Other Job (Link) | 3/2/2012 | |--------------------------------|----------------|

Me temo que todavía no sé cómo pasar logísticamente el elemento con devoluciones de llamadas y solicitudes, incluso después de leer la sección CrawlSpider de la documentación de Scrapy.


Por favor, primero lea los docs para entender lo que digo.

La respuesta:

Para raspar los campos adicionales que se encuentran en otras páginas, en un método de análisis extraiga la URL de la página con información adicional, cree y devuelva desde ese método de análisis un objeto de solicitud con ese URL y pase los datos ya extraídos a través de su parámetro meta .

¿Cómo fusiono los resultados de la página de destino a la página actual en scrapy?


También puede usar Python functools.partial para pasar un item o cualquier otro dato serializable mediante argumentos adicionales a la siguiente devolución de llamada de Scrapy.

Algo como:

import functools # Inside your Spider class: def parse(self, response): # ... # Process the first response here, populate item and next_url. # ... callback = functools.partial(self.parse_next, item, someotherarg) return Request(next_url, callback=callback) def parse_next(self, item, someotherarg, response): # ... # Process the second response here. # ... return item


Un ejemplo de documentación desechable.

def parse_page1(self, response): item = MyItem() item[''main_url''] = response.url request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) request.meta[''item''] = item return request def parse_page2(self, response): item = response.meta[''item''] item[''other_url''] = response.url return item