我正在尝试从网页上获取数据,我会跟踪您的所有链接。网页模型很糟糕,页面某些部分的链接在链接之前和之后都包含空格,因此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(空格)更改为+。
谢谢!
答案 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())
谢谢大家!