2012-12-19 27 views
2

我有這樣的代碼在我的履帶Scrapy履帶不completeing所有環路的解析函數

class StackSpider(InitSpider): 
    name = 'stack' 
    allowed_domains = ['sitepoint.com'] 
    start_urls = ["http://www.sitepoint.com"] 
    start_page = "http://www.sitepoint.com" 
    item = StackItem() 

    def init_request(self): 

     return Request(url=self.start_page, callback=self.parse) 

    def parse(self, response): 

     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//div[@class="headline_area"]') 
     items = [] 


     ivar = 1 
     for site in sites[:5]: 
      item = StackItem() 
      log.msg(' LOOP' +str(ivar)+ '', level=log.ERROR) 
      item['title'] ="yoo ma" 
      request = Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/", callback=self.test1) 
      request.meta['item'] = item 
      ivar = ivar + 1 
      yield request 


    def test1(self, response): 
     log.msg(' LOOP 2 \n', level=log.ERROR) 
     item = response.meta['item'] 
     item['desc'] = "test4" 
     return item 

我做到了按documentation但它只能在一個環路。 我的意思是,我只能在日誌中看到屏幕上

LOOP1 
LOOP2 

應重複3次

我想回報的不同組合和屈服,

  1. return requestreturn item給輸出LOOP1 LOOP2
  2. yield request and return item給出輸出LOOP1 LOOP1 LOOP1 LOOP2
  3. yield requestyield item使輸出LOOP1 LOOP1 LOOP1 LOOP2
  4. return requestyield item使輸出LOOP1 LOOP2

我怎樣才能LOOP 1 LOOP2 LOOP1 LOOP2 AND so on

+0

解決您的identation –

+0

顯然站點= hxs.select多次請求(」 // div [@ class =「top」]')只返回兩個項目....沒有人可以證明這一點,因爲您缺少重要信息以便進一步重現此問題。因此-1 –

+0

我可以確認它有許多來自scrapy外殼的項目。這就是爲什麼我切片檢測 – user19140477031

回答

1

我想,爲什麼你不Loop 2得到的原因是因爲你已硬編碼的網址在Request。 Scrapy不會多次訪問已經訪問過的URL。

嘗試更改該URL並查看它是如何發生的。不要依賴的消息Requests的順序並不發生在爲了

5

問題是在循環

for site in sites[:5]: 

您要求在循環中多次1個相同的URL。

Scrapy默認過濾相同的請求並忽略它們。

,如果你想在同一個網址,你需要設置dont_filter=True

  request = Request("http://www.sitepoint.com/getting-to-know-css3-selectors-structural-pseudo-classes/", 
      dont_filter=True, 
      callback=self.test1) 

那麼它應該是重複3次

+0

dont_filter was the問題給我。這是使用框架的問題。太多未知變量。 –

+0

@PraveenSinghYadav它真的不是一個問題沒有太多的未知變量,所有你需要做的就是檢查文檔 https://doc.scrapy.org/en/latest/topics/request-response.html –