我的蜘蛛中有这样的东西:
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")
我从some_parse获得了数千个日志,而从process_request只获得了几百个日志。为什么会这样?每个页面请求都没有通过中间件吗?
答案 0 :(得分:0)
2个问题
some_parse
我很确定您的网址因重复而被过滤了。
答案 1 :(得分:0)
我想我发现了这个问题。我有:
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")