在python中清理废弃的URL

时间:2016-03-17 07:17:28

标签: python regex python-2.7

我正在编写一个网络刮刀来抓取网站链接。它工作正常,但输出链接不干净。它输出损坏的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

我尝试使用此正则表达式清除不是html的链接

link = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', link)
                    print link

它会清除网址,但会为其添加方括号。如何清洁这个没有方括号?我应该如何防止两次或多次打印相同的网址

/preferences?hl=en&someting -> []
http://www.web1.com/parameters -> [http://www.web1.com/parameters]

2 个答案:

答案 0 :(得分:2)

您在匹配的商品周围收到[]因为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以仅获取唯一链接,以防止打印相同的网址。

答案 1 :(得分:1)

尝试使用

links = re.findall('href="(http.*?)"', sourceCode)
links = sorted(set(links))

for link in links:
    print(links)

这将只获取以http开头的链接并删除重复项并对其进行排序