2016-05-06 7 views
2

Ich studiere Scrapy-Bibliothek und versuche, einen kleinen Crawler zu machen.Scrapy. Unerwartete Symbole in LinkExtractor

Hier die Regeln des Crawlers:

rules = (
    Rule(LinkExtractor(restrict_xpaths='//div[@class="wrapper"]/div[last()]/a[@class="pagenav"][last()]')), 
    # Rule(LinkExtractor(restrict_xpaths='//span[@class="update_title"]/a'), callback='parse_item'), 
) 

Aber ich bekomme diese Fehlermeldung:

DEBUG: Crawled (200) <GET http://web/category.php?id=4&> (referer: None) 
DEBUG: Crawled (404) <GET http://web/%0D%0Acategory.php?id=4&page=2&s=d> (referer: http://web/category.php?id=4&) 
DEBUG: Ignoring response <404 http://web/%0D%0Acategory.php?id=4&page=2&s=d>: HTTP status code is not handled or not allowed 

Ist hier, wie html wie folgt aussehen:

<a class="pagenav" href=" category.php?id=4&page=8&s=d& ">8</a> 
| 
<a class="pagenav" href=" category.php?id=4&page=9&s=d& ">9</a> 
| 
<a class="pagenav" href=" category.php?id=4&page=10&s=d& ">10</a> 
|   
<a class="pagenav" href=" category.php?id=4&page=2&s=d& ">Next ></a> 

Kann jemand erklären, wo ist das% 0D % 0A kommen von? Mit freundlichen Grüßen, Maxim.

UPD: habe ich eine einfache Funktion

def process_value(value): 
    value = value.strip() 
    print value 
    return value 

und geänderte Regeln zu

rules = (
    Rule(LinkExtractor(restrict_xpaths='//div[@class="wrapper"]/div[last()]/a[@class="pagenav"][last()]', process_value=process_value)), 
    # Rule(LinkExtractor(restrict_xpaths='//span[@class="update_title"]/a'), callback='parse_item'), 
) 

Druckbefehl druckt diese:

Crawled (200) <GET http://web/category.php?id=4&>(referer: None) 
http://web/ 
category.php?id=4&page=2&s=d& 
Crawled (404) <GET http://web/%0D%0Acategory.php?%0D=&id=4&page=2&s=d>(referer: http://web/category.php?id=4&) 
+0

Können Sie den Code anzeigen, wo Sie das 'href' Tag extrahieren? – Rahul

+1

Meiner Meinung nach müssen Sie zuerst die relative URL entfernen und dann eine Anfrage stellen. Durch das Entfernen werden die Zeichen "Wagenrücklauf-% 0D" und "Zeilenvorschub-% 0A" entfernt. – Rahul

+0

Danke, aber aus irgendeinem Grund .strip() wird nicht funktionieren :( –

Antwort

1

%0D und %0A ein re CR und LF Zeichen in HTML-Codierung.

Autor der Website, die Sie analysieren die Zeichen in HTML-Dokument. Ich denke gelegentlich, weil sie nicht in IDE oder Browser sichtbar sind.

Erklärung, was die unsichtbaren Zeichen bedeuten:

und mehr über die Codierung http://www.w3schools.com/tags/ref_urlencode.asp

Ich schlage vor, Sie alle Links strippen, die zu holen brauchen in der Art so:

href = href.strip() 
+0

Scheint wie .strip() kann nicht mit diesem wohlgeformten HTML-Code umgehen: D –

Verwandte Themen