我正在编写一个网络刮刀来抓取网站链接。它工作正常,但输出链接不干净。它输出损坏的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]
答案 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
开头的链接并删除重复项并对其进行排序