我正在研究Scrapy库并尝试制作一个小爬虫。
以下是抓取工具的规则:
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'),
)
但我收到此错误消息:
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
这是html的样子:
<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>
有人可以解释这个%0D%0A来自哪里? 亲切的问候,Maxim。
UPD : 我做了一个简单的功能
def process_value(value):
value = value.strip()
print value
return value
并将规则更改为
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'),
)
print命令打印出来:
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 :(得分:1)
%0D
和%0A
为CR
和LF
个字符。
您解析的网站的作者将字符放入HTML文档。我想偶尔会因为它们在IDE或浏览器中不可见。
解释不可见字符的含义:
有关编码http://www.w3schools.com/tags/ref_urlencode.asp
的更多信息我建议您删除所有需要获取的链接:
href = href.strip()