2017-11-11 14 views
0

Ich versuche lokalisierte URLS zu leugnen, wie folgt:scrapy deny Urls lokalisierte

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

jedoch dies nicht gelingen. Versuchte andere Regexes wie das Folgende, aber kein Glück.

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

Im Wesentlichen bin ich nur an der englischen Version der Ressource interessiert. Keine Version, die spanisch ist, dh: es hat /es/ in der URL.

Wie kann ich sicherstellen, dass ich keine spanischen URLs crawle?

+0

Beste und einfache Art und Weise ist eine mddleware zu verwenden und eine beliebige URL ignorieren innerhalb 'process_request' Methode – Umair

+0

gibt es keine' process_request' Methode für Middleware obwohl? – DarthVader

+0

Ich bin mir nicht sicher, was Sie gesagt haben, erstellen Sie einfach eine Download-Middleware-Datei und innerhalb von process_request dieser Methode Zugriff auf die URL über request.url und dann entscheiden, ob diese URL kratzen oder ignorieren. PS: process_request wird aufgerufen, bevor eine URL gekratzt wird. – Umair

Antwort

0

Definieren Sie Ihre Middleware in der Spinne wie diese

class MySpider(scrapy.Spider): 
    name = "my_spider" 

    custom_settings = { 
     'DOWNLOADER_MIDDLEWARES': { 
      'project_root_path.MyMiddlewaresFile.MyMiddleware': 300, 

     } 
    } 


    def start_requests(self): 

     yield Request() 

und in Ihrem 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 

Siehe docs: https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.DownloaderMiddleware.process_request

Verwandte Themen