抓取回調函數 (Scrapy callback function)


問題描述

抓取回調函數 (Scrapy callback function)

我有一個基本的scrapy腳本,它執行以下操作:

  1. 訪問網站
  2. 使用規則獲取所有頁面:

     rules = (
             Rule(LinkExtractor(allow=(), restrict_xpaths=('//*[@id="pagination_top"]/a',)), callback="parse_page", follow= True),
             )
    
  3. 在每個頁面中,獲取產品頁面的所有鏈接:

    def parse_page(self, response):
        for href in response.css("#prod_category > ul > li > a::attr('href')"):
            url = response.urljoin(href.extract())
            yield scrapy.Request(url, callback=self.parse_dir_contents)
    
  4. 並訪問每個產品頁面以獲取有關產品的詳細信息。然後我從另一個鏈接獲取更多詳細信息

    def parse_dir_contents(self, response):
         # select xpath here
         print '________________________BEGIN PRODUCT________________________'
         item = detailedItem()
         item['title'] = sites.xpath('//*[@id="product‑name"]/text()').extract()
    
         # get url_2 from this page
    
         request = scrapy.Request(url_2, callback=self.parse_detailed_contents)
         request.meta['item'] = item
         yield request
    
  5. 最後是獲取產品詳細信息的函數

    我認為這是最後一個 parse_detailed_contents是我有問題的地方

    def parse_detailed_contents(self, response):
        item = response.meta['item']
        sel = Selector(response)
        sites = sel.xpath('//*[@id="prod‑details"]')
    
        print '________________________GETTING DETAILS________________________'
        item['prod_details'] = sites.xpath('//*[@id="prod‑details"]/div/text()').extract()
    
        return item
    

問題是我的腳本返回項目['prod_details' ] 用於第一個鏈接,但不返回任何後續鏈接的項目。

那是因為 url_2 對所有產品都一樣嗎?

有人可以幫忙嗎?提前非常感謝!


參考解法

方法 1:

try adding dont_filter=True

def parse_dir_contents(self, response):
 # select xpath here
 print '________________________BEGIN PRODUCT________________________'
 item = detailedItem()
 item['title'] = sites.xpath('//*[@id="product‑name"]/text()').extract()

 # get url_2 from this page

 request = scrapy.Request(url_2, callback=self.parse_detailed_contents,dont_filter=True)
 request.meta['item'] = item
 yield request

(by user6055239jithin)

參考文件

  1. Scrapy callback function (CC BY‑SA 2.5/3.0/4.0)

#yield-return #Python #scrapy






相關問題

Bagaimana saya bisa membuat `menunggu ...` bekerja dengan `yield return` (yaitu di dalam metode iterator)? (How can I make `await …` work with `yield return` (i.e. inside an iterator method)?)

收益回報使用 (yield return usage)

無法將“<>d__6”類型的對象轉換為“System.Object[]”類型 (Unable to cast object of type '<>d__6' to type 'System.Object[]')

使用 yield return 時 GetEnumerator() 方法會發生什麼? (What happens to GetEnumerator() method when yield return is used?)

抓取回調函數 (Scrapy callback function)

我可以在 VB.NET 中為 IEnumerable 函數實現收益返回嗎? (Can I implement yield return for IEnumerable functions in VB.NET?)

使用具有代碼訪問安全性的 C# 迭代器方法時出現問題 (Problem using C# iterator methods with code access security)

如何使用收益返回和遞歸獲得每個字母組合? (How do I get every combination of letters using yield return and recursion?)

是否可以使用 'yield' 來生成 'Iterator' 而不是 Scala 中的列表? (Is it possible to use 'yield' to generate 'Iterator' instead of a list in Scala?)

yield return 除了 IEnumerable 之外還有其他用途嗎? (Does yield return have any uses other than for IEnumerable?)

這個函數可以用更有效的方式編寫嗎? (Can this function be written in more efficient way?)

當我在代碼中引入產量時,它在 python 中不起作用 (when i introduced yield in code it doesn't work in python)







留言討論