python - spider - Código de ejemplo para Scrapy process_links y process_request
scrapy spider (1)
Te refieres a scrapy.spiders.Rule
que se usa con más frecuencia en scrapy.CrawlSpider
Hacen más o menos lo que dicen los nombres o, en otras palabras, que actúan como una especie de middleware entre el momento en que se extrae y procesa / descarga el enlace.
process_links
encuentra entre el momento en que se extrae el enlace y se convierte en solicitud. Hay casos de uso muy interesantes para esto, solo por nombrar algunos comunes:
- Filtra algunos enlaces que no te gustan.
- Haga la redirección manualmente para evitar malas solicitudes.
ejemplo:
def process_links(self, link):
for link in links:
#1
if ''foo'' in link.text:
continue # skip all links that have "foo" in their text
yield link
#2
link.url = link.url + ''/'' # fix url to avoid unnecessary redirection
yield link
process_requests
ubica entre la solicitud que se acaba de realizar y antes de que se descargue. Comparte algunos casos de uso con process_links
pero puede hacer algunas cosas interesantes como:
- Modificar encabezados (por ejemplo, cookies).
- Cambie detalles como la devolución de llamada, dependiendo de algunas palabras clave en la url.
ejemplo:
def process_req(self, req):
# 1
req = req.replace(headers={''Cookie'':''foobar''})
return req
# 2
if ''foo'' in req.url:
return req.replace(callback=self.parse_foo)
elif ''bar'' in req.url:
return req.replace(callback=self.parse_bar)
return req
Probablemente no los uses a menudo, pero estos dos pueden ser accesos directos muy prácticos y fáciles en algunas ocasiones.
Soy nuevo en Scrapy y esperaba que alguien me diera buenos códigos de ejemplo cuando process_links y process_request son los más útiles. Veo que process_links se usa para filtrar URL pero no sé cómo codificarlo.
Gracias.