Scrapy 每一个卑鄙的请求都经过中间商吗?

Scrapy 每一个卑鄙的请求都经过中间商吗?,scrapy,Scrapy,我的蜘蛛身上有这样的东西: def some_parse(self,response): # ... other code here for link in extracted_links: log.info(link) yield scrapy.Request(link, callback=self.some_parse, method="GET") 在我的定制下载中间件中,我有如下内容: def process_request(self, r

我的蜘蛛身上有这样的东西:

def some_parse(self,response):
    # ... other code here
    for link in extracted_links:
        log.info(link)
        yield scrapy.Request(link, callback=self.some_parse, method="GET")
在我的定制下载中间件中,我有如下内容:

def process_request(self, request, spider):
    #do something
    log.info(request.url)
    request.headers.setdefault('User-Agent', "some randomly selected useragent")
我从一些_解析中获得数千个日志,而从process_请求中仅获得几百个日志。为什么会这样?不是每个页面请求都通过中间件吗?

2个问题

  • 你是不是让你的刮板全部刮掉了
  • 有一个变化是,大多数URL都是重复的,这就是为什么没有通过中间件,而是在爬行器的
    部分解析中显示出来的原因

  • 我很确定您的URL被过滤是因为重复。

    我想我已经解决了这个问题。我有:

    def some_parse(self,response): #1
        # ... other code here 
        for link in extracted_links: #2
            log.info(link) #3
            yield scrapy.Request(link, callback=self.some_parse, method="GET") #4
    
    如果深度限制为N,并且响应属于属于第N个深度的URL,那么它产生的所有链接都不会通过中间件,因为它已经被记录。因此存在差异

    正确的日志记录方式是:

        def some_parse(self,response):
            # ... other code here 
            log.info(response.url)
            for link in extracted_links:
                yield scrapy.Request(link, callback=self.some_parse, method="GET")
    

    是的,我让它们全部完成了。@Ayushkarki然后似乎不可能有一些URL没有通过那个中间件