urljoin follow example python scrapy

follow - scrapy python documentation



¿Cómo agregar encabezados a las solicitudes de Scrapy CrawlSpider? (2)

Estoy trabajando con la clase CrawlSpider para rastrear un sitio web y me gustaría modificar los encabezados que se envían en cada solicitud. Específicamente, me gustaría agregar el referer a la solicitud.

Según esta pregunta , revisé

response.request.headers.get(''Referer'', None)

en mi función de análisis de respuesta y el encabezado Referer no está presente. Supongo que eso significa que el Referer no se presentará en la solicitud (a menos que el sitio web no lo devuelva, no estoy seguro de eso).

No he podido averiguar cómo modificar los encabezados de una solicitud. De nuevo, mi araña se deriva de CrawlSpider. Anular las solicitudes de _requests_to_follow o especificar una devolución de llamada de devolución de proceso para una regla no funcionará porque el referer no está dentro del alcance en esos momentos.

¿Alguien sabe cómo modificar los encabezados de solicitud de forma dinámica?


Odio responder mi propia pregunta, pero descubrí cómo hacerlo. Tienes que habilitar el SpiderMiddleware que rellenará el referer para respuestas. Consulte la documentación de scrapy.contrib.spidermiddleware.referer.RefererMiddleware

En resumen, debe agregar este middleware al archivo de configuración de su proyecto.

SPIDER_MIDDLEWARES = { ''scrapy.contrib.spidermiddleware.referer.RefererMiddleware'': True, }

Luego, en su método de análisis de respuesta puede usar, response.request.headers.get(''Referrer'', None) , para obtener el referer.

Si comprende estos middlewares de inmediato, léalos de nuevo, tómese un descanso y vuelva a leerlos. Los encontré muy confusos.


Puede pasar REFERER manualmente a cada solicitud usando el argumento de headers :

yield Request(parse=..., headers={''referer'':...})

RefererMiddleware hace lo mismo , tomando automáticamente la URL de referencia de la respuesta anterior.