簡體   English   中英

scrapy.Request 不進入下載中間件,它返回 Request 而不是 response

[英]scrapy.Request doesn't enter the download middleware, it returns Request instead of response

我正在使用scrapy.Spider 進行scrape ,我想在start_requests 中的回調函數中使用request,但是該請求不起作用,它應該返回一個響應,但它只返回Request。

我跟着調試斷點,發現在類Request(object_ref)中,請求只完成了初始化,但沒有像預期的那樣進入request = next(slot.start_requests),開始請求,因此只返回Request。

這是我的代碼:

class ProjSpider(scrapy.Spider):
    name = 'Proj'
    allowed_domains = ['mashable.com']

    def start_requests(self):
        # pages
        pages = 10
        for i in range(1, pages):
            url = "https://mashable.com/channeldatafeed/Tech/new/page/"+str(i)
            yield scrapy.Request(url, callback=self.parse_mashable)

請求工作正常,以下是:

    def parse_mashable(self, response):
        item = Item()
        json2parse = response.text
        json_response = json.loads(json2parse)
        d = json_response['dataFeed'] # a list containing dicts, in which there is url for detailed article
        for data in d:
            item_url = data['url'] # the url for detailed article
            item_response = self.get_response_mashable(item_url)
            # here I want to parse the item_response to get detail
            item['content'] = item_response.xpath("//body").get
            yield item

    def get_response_mashable(self,url):
        response = scrapy.Request(url) 
        # using self.parser. I've also defined my own parser and yield an item
        # but the problem is it never got to callback
        return response # tried yield also but failed

這是請求不起作用的地方。 url 在 allowed_domains 中,它不是重復的 url。 我猜是scrapy的Request的異步機制造成的,但是怎么會影響self.parse_mashable中的request,到那時start_requests中的Request已經完成了。 我設法在 python Requests-html 中執行了第二個請求,但我仍然不知道為什么。

那么有人可以幫忙指出我做錯的地方嗎? 提前謝謝!

Scrapy 並不真正期望您按照您嘗試的方式執行此操作,因此它沒有簡單的方法來執行此操作。

相反,您應該做的是使用請求的meta字典將您從原始頁面抓取的數據傳遞給新的回調。

有關詳細信息,請檢查將附加數據傳遞給回調函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM