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())
谢谢大家!
我正在尝试从网页获取数据,我在其中跟踪您所有的 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())
谢谢大家!