2017-08-29 73 views
0

我想刮一些頁面在相同的域名,但不同的結構與scrapy。是否有最好的方式來刮在同一域的不同結構中的多個頁面與scrapy?

http://example.com/page1 
http://example.com/page2 
http://example.com/page3 

我發現了這個答案,現在正在使用它。 (傳遞參數是可以理解的,我)

Scrapy multiple requests and fill single item

def start_requests(self): #This refers scrapy tutrials 
     urls = [ 
      'http://example.com/page1', 
     ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

def parse(self, response): 
    data_page1 = response.xpath("//body") 
    yield scrapy.Request('http://example.com/page2', self.parse2, 
        meta={'data_page1': data_page1}) 

def parse2(self, response): 
    data_page2 = response.xpath("//body") 
    yield scrapy.Request('http://example.com/page3', self.parse3, 
        meta={'data_page1': data_page1,'data_page2': data_page2}) 

def parse3(self, response): 
    data_page3 = response.xpath("//body") 
    yield { 
     'data_page1' : response.meta['data_page1'], 
     'data_page2' : response.meta['data_page2'], 
     'data_page3' : data_page3 
    } 

但我認爲這是不好的代碼......

多個頁面更有效有沒有最好的方式刮掉?

謝謝!

回答

2

嗯,我不覺得這段代碼很糟糕,並且一直都在使用這種方法。畢竟,在FAQ中提到它是從多個頁面收集數據的建議方式。因此,如果您確實需要從多個頁面收集數據並將其作爲單個項目進行收集,則此方法非常有效。

+1

謝謝!聽到這個消息,我感到寬慰! –

相關問題