Estoy usando Scrapy, en particular la clase CrawlSpider
de Scrapy para raspar enlaces web que contienen ciertas palabras clave. Tengo una larga lista start_urls
que obtiene sus entradas de una base de datos SQLite que está conectada a un proyecto de Django. Quiero guardar los enlaces web raspados en esta base de datos.¿Cómo acceder a una start_url específica en un Scrapy CrawlSpider?
Tengo dos modelos de Django, uno para las URL de inicio como http://example.com
y uno de los enlaces a las webs raspadas como http://example.com/website1
, http://example.com/website2
etc. Todos los enlaces a las webs son raspadas subsitios de una de las URL de inicio en la lista start_urls
.
El modelo de enlaces web tiene una relación muchos a uno con el modelo de inicio de URL, es decir, el modelo de enlaces web tiene una clave externa para el modelo de inicio de URL. Para guardar correctamente mis enlaces web raspados a la base de datos, necesito decir el CrawlSpider
del método parse_item()
que inicia el URL al que pertenece el enlace web raspado. ¿Cómo puedo hacer eso? La clase DjangoItem
de Scrapy no ayuda a este respecto, ya que todavía tengo que definir explícitamente la URL de inicio utilizada.
En otras palabras, ¿cómo puedo pasar la url de inicio actualmente utilizada al método parse_item()
, de modo que pueda guardarla junto con los enlaces web raspados apropiados a la base de datos? ¿Algunas ideas? ¡Gracias por adelantado!
¿Puede tener el campo start_url en la misma tabla que la tabla de enlaces web (como en el DjangoItem que está utilizando)?Claro, creará desnormalización redundante, pero si desea evitar llamadas explícitas, esto podría ayudar. – zubinmehta