Scrapy清理网址链接

时间:2017-05-09 15:31:40

标签: python scrapy scrapy-spider

我正在尝试从网页上获取数据,我会跟踪您的所有链接。网页模型很糟糕,页面某些部分的链接在链接之前和之后都包含空格,因此scrapy随之而来,您的Web服务器重定向301创建循环。

我试图过滤链接的URL,但这是不可能的,总是返回空格或符号+。

代码的一部分

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)),
)

网页代码

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

输出清洁

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

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

我尝试使用正则表达式和其他语法,但是我无法清理URL,在某些情况下,如果它不在其他情况下工作,则将%20(空格)更改为+。

谢谢!

2 个答案:

答案 0 :(得分:1)

你提到“%20”和“+”是网址的一部分,这就是为什么我怀疑这些网址是网址编码的原因。

所以在剥离任何空格之前,你需要对其进行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 '\"")

如果仍在使用Python 2.7,则需要替换unquote行:

link_text = urllib.unquote(link_text)

答案 1 :(得分:0)

我已经解决了,我已经输入以下代码来清理URL,现在它正常工作。我希望你能帮助那些和我有同样问题的人。

def cleanurl(link_text):
    return ''.join(link_text.split())

谢谢大家!