[英]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.