Scrapy 清理 url 链接

Scrapy sanitize url links

我正在尝试从网页获取数据,我在其中跟踪您所有的 link。网络建模不当,页面某些部分的 links 在 link 前后包含空格,因此 scrapy 随之而来,您的 Web 服务器重定向并创建 301 循环。

我试过过滤link的URL,但是不行,总是returns个空格或者符号+。

部分代码

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>

输出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

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

谢谢!

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

因此,在去除任何空格之前,您需要url对其进行解码:

使用 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,您需要更换反引号行:

link_text = urllib.unquote(link_text)

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

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

谢谢大家!