Scrapy: segui il link per ottenere ulteriori dati sugli articoli?

Non ho un problema di codice specifico Non sono sicuro di come affrontare il seguente problema logisticamente con il framework Scrapy:

La struttura dei dati che voglio raschiare è in genere una riga di tabella per ogni articolo. Semplice abbastanza, giusto?

In definitiva voglio raschiare il titolo , la data di scadenza e i dettagli per ogni riga. Titolo e data di scadenza sono immediatamente disponibili sulla pagina …

MA i dettagli stessi non sono nella tabella – ma piuttosto un link alla pagina che contiene i dettagli (se questo non ha senso, ecco una tabella):

|-------------------------------------------------| | Title | Due Date | |-------------------------------------------------| | Job Title (Clickable Link) | 1/1/2012 | | Other Job (Link) | 3/2/2012 | |--------------------------------|----------------| 

Temo di non sapere ancora come passare logisticamente l’object con callback e richieste, anche dopo aver letto la sezione CrawlSpider della documentazione di Scrapy.

    Per favore, prima leggi i documenti per capire cosa dico.

    La risposta:

    Per raschiare campi aggiuntivi che si trovano su altre pagine, in un metodo di analisi estrapola l’URL della pagina con informazioni aggiuntive, crea e restituisci da quel metodo di analisi un object Richiedi con quell’URL e passa i dati già estratti tramite il suo parametro meta .

    come faccio a unire i risultati dalla pagina di destinazione alla pagina corrente in scrapy?

    Un esempio di documentazione scrapy

     def parse_page1(self, response): item = MyItem() item['main_url'] = response.url request = scrapy.Request("http://www.example.com/some_page.html", callback=self.parse_page2) request.meta['item'] = item return request def parse_page2(self, response): item = response.meta['item'] item['other_url'] = response.url return item 

    È inoltre ansible utilizzare python functools.partial per passare un item o altri dati serializzabili tramite argomenti aggiuntivi al successivo callback Scrapy.

    Qualcosa di simile a:

     import functools # Inside your Spider class: def parse(self, response): # ... # Process the first response here, populate item and next_url. # ... callback = functools.partial(self.parse_next, item, someotherarg) return Request(next_url, callback=callback) def parse_next(self, item, someotherarg, response): # ... # Process the second response here. # ... return item