2017-05-09 5 views
0

Ich versuche, Daten von einer Webseite zu erhalten, wo ich alle Ihre Links verfolgen. Das Web ist schlecht modelliert, die Links in bestimmten Teilen der Seiten enthalten Leerzeichen vor und nach dem Link, also folgt scrapy und Ihr Web-Server leitet 301 Schleifen um.Scrapy sanitize URL Links

Ich habe versucht, die URL der Links zu filtern, aber es ist unmöglich, gibt immer leere Leerzeichen oder Symbol + zurück.

Teil Code

def cleanurl(link_text): 
    print "original: ", link_text 
    print "filter: ", link_text.strip("\s+\t\r\n '\"") 
    return link_text.strip("\s+\t\r\n '\"") 
    #return " ".join(link_text.strip("\t\r\n '\"")) 
    #return link_text.replace("\s", "").replace("\t","").replace("\r","").replace("\n","").replace("'","").replace("\"","") 

rules = (
    Rule (LinkExtractor(allow=(), deny=(), process_value= cleanurl)), 
) 

Web Code

<a href= 
          "        ?on_sale=1 
          " 
         class="selectBox">ON SALE 
        </a> 

Ausgabe cleanurl

original: http://www.portshop.com/computers-networking-c_11257/        ?on_sale=1 

filter: http://www.portshop.com/computers-networking-c_11257/        ?on_sale=1 

habe ich versucht, reguläre Ausdrücke und andere zu verwenden, aber ich kann die URL nicht sanieren, in In einigen Fällen, wenn es in anderen nicht funktioniert, ändern Sie% 20 (Leerzeichen) in +.

Danke!

+1

Können Sie Ihre Frage mit mehr URLs neu gestalten? Möglicherweise geben Sie uns ein paar URLs, die Sie verarbeiten und die Ausgabe derzeit und die Ausgabe, die Sie erwarten. –

Antwort

0

Ich habe bereits gelöst, ich habe den folgenden Code eingegeben, um die URL zu säubern und jetzt funktioniert es richtig. Ich hoffe, du kannst jemandem helfen, der das gleiche Problem hat wie ich.

Danke allen!

1

Sie erwähnen "% 20" und "+" als Teil der URLs, deshalb vermute ich, dass diese URLs URL-codiert sind.

Also, bevor sie von irgendwelchen Whitespaces Strippen, Sie müssen es urldecode:

Python 3:

import urllib 

def cleanurl(link_text): 
    print "original: ", link_text 
    print "filter: ", link_text.strip("\s\t\r\n '\"") 
    link_text = urllib.parse.unquote(link_text) 
    return link_text.strip("\s+\t\r\n '\"") 

Wenn noch mit Python 2.7, können Sie die unquote Linie ersetzen müssen:

link_text = urllib.unquote(link_text) 
+0

Das Problem besteht darin, dass die URL vom Programm erstellt wird, die Seite links und rechts Links enthält, ohne absolute URL zu sein, und wenn der Join erstellt wird, erstellen Sie% 20 und andere (encode) – Anto