我正在写一个网页刮刀,从网站上刮链接。它工作良好,但输出链接不干净。它输出损坏的html链接,并检索相同的html链接。这是密码
links = re.findall('<a class=.*?href="?\'?([^"\'>]*)', sourceCode)
for link in links:
print link
这就是输出的样子
/preferences?hl=en&someting
/preferences?hl=en&someting
/history/something
/history/something
/support?pr=something
/support?pr=something
http://www.web1.com/parameters
http://www.web1.com/parameters
http://www.web2.com/parameters
http://www.web2.com/parameters
我尝试使用这个regex清除不是html的链接。
link = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', link)
print link
它清理url,但在其中添加方括号。如何清洗这个没有方括号的东西?如何防止打印相同的url两次或多次
/preferences?hl=en&someting -> []
http://www.web1.com/parameters -> [http://www.web1.com/parameters]
发布于 2016-03-17 07:23:27
因为[]
re.findall 返回项的列表,所以在匹配的项中获得了。
link = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', link)
# pay attention on iteration over set(links) and not links
for link in set(links):
print link
注意,我已经将set
创建添加到for loop
中,这样只能获得唯一的链接,这样就可以防止打印相同的url。
发布于 2016-03-17 07:23:07
试着使用
links = re.findall('href="(http.*?)"', sourceCode)
links = sorted(set(links))
for link in links:
print(links)
这将只获得以http
开头的链接,并删除重复的链接并对其进行排序。
https://stackoverflow.com/questions/36053881
复制相似问题