Scrapy: Seguire il link per ottenere ulteriore Elemento di dati?

Non ho un codice specifico problema non sono solo sicuro di come affrontare il seguente problema logistico con il Scrapy quadro:

La struttura dei dati, voglio raschiare in genere è una riga di tabella per ogni elemento. Abbastanza semplice, giusto?

In definitiva voglio raschiare il Titolo, Data di scadenza, e Dettagli per ogni riga. Titolo e Data di scadenza sono immediatamente disponibili sulla pagina…

MA il Dettagli in se stessi non sono in tabella — ma, piuttosto, un link alla pagina contenente i dettagli (se che non ha senso ecco una tabella):

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

Ho paura non so ancora come logisticamente passare la voce in giro con le richiamate e le richieste, anche dopo la lettura attraverso il CrawlSpider sezione del Scrapy documentazione.

InformationsquelleAutor dru | 2012-02-17

 

3 Replies
  1. 27

    Si prega di leggere prima il docs per capire quello che dico.

    La risposta:

    Per raschiare i campi aggiuntivi che sono su altre pagine, in un metodo parse estrarre l’URL della pagina con ulteriori informazioni, creare e ritorno dal metodo parse un oggetto di Richiesta con l’URL e passano già i dati estratti tramite il suo meta parametro.

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

  2. 19

    Un esempio da scrapy documentazione:

    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
        yield request
    
    def parse_page2(self, response):
        item = response.meta['item']
        item['other_url'] = response.url
        yield item
  3. 3

    È inoltre possibile utilizzare Python functools.partial per passare un item o qualsiasi altro serializable dati attraverso ulteriori argomenti per la prossima Scrapy richiamata.

    Qualcosa di simile:

    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

Lascia un commento