Python 用于跳过某些页面的scrapy中间件
我只想从“name”包含一些模式的页面获取数据 我想跳过其他页面 现在是这样Python 用于跳过某些页面的scrapy中间件,python,scrapy,Python,Scrapy,我只想从“name”包含一些模式的页面获取数据 我想跳过其他页面 现在是这样 def parse_item(self, response): item=Item() item['name']=response.xpath('//title//text()').extract().first() if "pattern" not in item['name']: return [] else: return item 如何将其作为中间件?由于它提供了过程\u响应,
def parse_item(self, response):
item=Item()
item['name']=response.xpath('//title//text()').extract().first()
if "pattern" not in item['name']:
return []
else:
return item
如何将其作为中间件?由于它提供了过程\u响应
,因此您应该使用
从scrapy.exceptions导入IgnoreRequest
class SkipMiddleware(object):
def process_response(self, request, response, spider):
if spider.name == 'myspider' and request.callback == spider.parse_item:
if 'pattern' not in response.xpath('//title//text()').extract_first():
raise IgnoreRequest
return response
记住回答我自己的问题很难过,但是我能做什么呢
def process_response(self,request, response, spider):
if not spider._rules:
return response
rule_index=request._meta.get('rule',None)
response_callback=None
if rule_index != None:
rule = spider._rules[rule_index]
response_callback=rule.callback
if response_callback and response_callback == getattr(spider,self.settings['PARSE_FUNCTION']):
## do something
return response
但它对所有页面都是扫描,只对parse_item()进行扫描?从未想过使用中间件来处理这种痛苦+1,感谢扫描在init?request.callback中获取蜘蛛名称始终_response_下载