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