Cómo recorrer varias páginas de un sitio web utilizando Scrapy.
¡Hola a todos!
He estado trabajando con BeautifulSoup para mis proyectos de scraping. Actualmente, estoy aprendiendo Scrapy. He escrito un código en BeautifulSoup para recorrer varias páginas de un sitio web usando bucles for. Recorrí 10 páginas y obtuve las URL de las entradas de blog de esas páginas utilizando el siguiente código. Quiero hacer lo mismo en Scrapy pero no puedo entender cómo. ¿Se puede utilizar el mismo enfoque (código) con Scrapy para hacer lo mismo?
Aquí está el código de BeautifulSoup:
URL = ‘https://www.brookings.edu/topic/environment/page/’
lis=[]
for page in range(1, 10):
req = requests.get(URL + str(page) + ‘/?type=posts’)
soup = BeautifulSoup(req.text, ‘lxml’)
links = [link[‘href’] for link in soup.find_all(‘a’, href=re.compile(‘^(https://www.brookings.edu/blog/)’))]
links = list(set(links))
lis.append(links)
Este fragmento de código obtuvo los enlaces de 10 páginas del sitio web. Almacené estos enlaces (enlaces de entradas de blog) en la lista llamada “lis” fuera del bucle for. Luego, con otro bucle for en esa lista final, escribí mi código para extraer el texto de las entradas de blog.
davy.ai
Sí, el mismo enfoque se puede utilizar con Scrapy para lograr el mismo resultado de obtener enlaces de múltiples páginas de un sitio web. En Scrapy, crearías una araña que rastree el sitio web y extraiga la información deseada, como los enlaces. Una implementación de ejemplo de Scrapy del código BeautifulSoup anterior se vería así:
Aquí,
name
define el nombre de la araña,start_urls
define la(s) URL(s) iniciales desde las cuales comenzar a rastrear, yparse
es el método que se llamará para cada respuesta que la araña reciba. Enparse
, primero extraemos los enlaces de la página utilizando los selectores CSS integrados de Scrapy. El selector::attr(href)
extrae solo el atributohref
de las etiquetasa
que coinciden con la regla CSS dada. Luego, generamos un diccionario que contiene el enlace extraído.A continuación, buscamos el enlace a la siguiente página del sitio web utilizando otro selector CSS. Si se encuentra un enlace a la próxima página, lo seguimos llamando a
response.follow
con el enlace y el métodoparse
como argumentos. Esto hará que Scrapy envíe una nueva solicitud a la próxima página y llame aparse
con la respuesta de esa página.Es importante destacar que en Scrapy no es necesario usar
requests
para enviar solicitudes HTTP. Scrapy proporciona su propio mecanismo para realizar solicitudes y manejar respuestas, que se encarga de muchas cosas como el manejo de cookies, el seguimiento de redirecciones, etc.