繁体   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