Tengo una pregunta sobre cómo hacer esto en la terapia. Tengo una araña que se arrastra para enumerar páginas de elementos. Cada vez que se encuentra una página de listado, con elementos, está la devolución de llamada parse_item() que se llama para extraer datos de elementos y generar elementos. Hasta ahora todo bien, todo funciona bien.Scrapy - analizar una página para extraer elementos - luego seguir y almacenar contenido de la URL del elemento
Pero cada elemento tiene, entre otros datos, una url, con más detalles sobre ese elemento. Quiero seguir esa URL y almacenar en otro campo de elemento (url_contents) el contenido recuperado de la URL de ese elemento.
Y no estoy seguro de cómo organizar el código para lograr eso, ya que los dos enlaces (enlace de listados y un enlace de elemento particular) se siguen de manera diferente, con devoluciones de llamada en diferentes momentos, pero tengo que correlacionarlos en el mismo procesamiento de elementos.
Mi código hasta ahora se ve así:
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail',)), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()
Eso es como lo hago. Creo que la única alternativa es reagrupar los datos en la etapa de almacenamiento/producción. – Acorn
Sí, también tenemos confirmación en el grupo de terapia, así que he elegido mi respuesta – StefanH