首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清除python中的刮掉的url

清除python中的刮掉的url
EN

Stack Overflow用户
提问于 2016-03-17 07:17:27
回答 2查看 183关注 0票数 1

我正在写一个网页刮刀,从网站上刮链接。它工作良好,但输出链接不干净。它输出损坏的html链接,并检索相同的html链接。这是密码

代码语言:javascript
运行
复制
links = re.findall('<a class=.*?href="?\'?([^"\'>]*)', sourceCode)
            for link in links:  
                print link      

这就是输出的样子

代码语言:javascript
运行
复制
/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的链接。

代码语言:javascript
运行
复制
link = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', link)
                    print link

它清理url,但在其中添加方括号。如何清洗这个没有方括号的东西?如何防止打印相同的url两次或多次

代码语言:javascript
运行
复制
/preferences?hl=en&someting -> []
http://www.web1.com/parameters -> [http://www.web1.com/parameters]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-17 07:23:27

因为[] re.findall 返回项的列表,所以在匹配的项中获得了

代码语言:javascript
运行
复制
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。

票数 2
EN

Stack Overflow用户

发布于 2016-03-17 07:23:07

试着使用

代码语言:javascript
运行
复制
links = re.findall('href="(http.*?)"', sourceCode)
links = sorted(set(links))

for link in links:
    print(links)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36053881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档