scrapy否认本地化的URL
问题描述:
余米试图否认局部URLS如下:scrapy否认本地化的URL
rules = (
Rule(LinkExtractor(deny=(r'\/es\/')), follow = True)
)
但是这个失败。尝试其他正则表达式,但不是运气。
rules = (
Rule(LinkExtractor(deny=(r'\/es\/*.*')), follow = True)
)
本质上我只对英文版资源感兴趣。不是西班牙语的版本,即:它在URL中有/es/
。
如何确保我不抓取西班牙语网址?
答
定义中间件在你的蜘蛛像这样
class MySpider(scrapy.Spider):
name = "my_spider"
custom_settings = {
'DOWNLOADER_MIDDLEWARES': {
'project_root_path.MyMiddlewaresFile.MyMiddleware': 300,
}
}
def start_requests(self):
yield Request()
,并在您MyMiddlewaresFile.py
class MyMiddleware(object):
def process_request(self, request, spider):
if "/en/" in request.url:
pass #Do not do anything.
else:
#keep processing request
return request
最简便的方法是使用mddleware和忽略任何URL在'process_request'方法内部 – Umair
虽然没有为中间件定义的'process_request'方法? – DarthVader
我不确定你说了什么,你只是创建一个下载中间件文件,并在该方法的process_request内部通过request.url访问URL,然后决定是否刮这个URL或忽略它。 PS:process_request在URL被刮掉之前被调用。 – Umair