Mejores prácticas de Scrapy para rastrear sitios de paginación.
Estoy creando un rastreador para html.
Cada página tiene una etiqueta como esta,
y en la última página no hay esta etiqueta.
¿Cómo puedo obtener cada página?
Al principio, pensé que sería así, sin embargo, por alguna razón, no se llama a self.start_request
al final.
page = 0
def start_requests(self, page=0):
urls = ['https://www.exmaple.com/page={0}'.format(page)]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
# ¿Comprobar si hay una etiqueta <a??
xlink = LinkExtractor()
for link in xlink.extract_links(response):
yield scrapy.Request(url=link.url, callback=self.parse_each)
if hay una etiqueta:
page = page + 1
self.start_request(page)
¿Cuál es la mejor práctica para hacer este rastreo?
davy.ai
Para rastrear todas las páginas sin perder ninguna, la mejor práctica sería utilizar un bucle en el método
start_requests
, donde el número de páginas para rastrear se obtiene analizando primero la primera página para obtener el número total de páginas disponibles, y luego utilizando una función de rango para recorrer todas las páginas.Aquí tienes un ejemplo:
En este código, el método
parse_main
se llama primero con el métodostart_requests
, que solicita la primera página (page=0) y luego la analiza para obtener el número total de páginas. Luego, recorre todas las páginas utilizando la funciónrange
y emite un objeto de solicitud para cada una de ellas, llamando al métodoparse_each
para analizar cada página. Esto garantiza que se rastreen todas las páginas sin necesidad de recursión o llamadas explícitas al métodostart_requests
.