2017-11-11 101 views
0

余米试图否认局部URLS如下:scrapy否认本地化的URL

rules = (
    Rule(LinkExtractor(deny=(r'\/es\/')), follow = True) 
) 

但是这个失败。尝试其他正则表达式,但不是运气。

rules = (
    Rule(LinkExtractor(deny=(r'\/es\/*.*')), follow = True) 
) 

本质上我只对英文版资源感兴趣。不是西班牙语的版本,即:它在URL中有/es/

如何确保我不抓取西班牙语网址?

+0

最简便的方法是使用mddleware和忽略任何URL在'process_request'方法内部 – Umair

+0

虽然没有为中间件定义的'process_request'方法? – DarthVader

+0

我不确定你说了什么,你只是创建一个下载中间件文件,并在该方法的process_request内部通过request.url访问URL,然后决定是否刮这个URL或忽略它。 PS:process_request在URL被刮掉之前被调用。 – Umair

回答

0

定义中间件在你的蜘蛛像这样

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 

见文档:https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request