使用python regex提取干净的URL

时间:2014-11-19 17:34:53

标签: python regex

谢谢!我使用@ nu11p01n73R的答案来自post,我主要得到的是URL,但仍有一些额外的&#34;噪音&#34;在开始和结束。我理想情况下只需要打印网址http://something.some - 所以正则表达式会删除网址开头的<a herf="并删除结尾处的" data-metrics='{"action" : "Click Story 2"}'> 。我尝试修改表达式来实现这一点,但是我遇到了URL开始和结束时出现问题的问题。 - 我认为这搞砸了我的正则表达式。有什么建议吗?

在.txt文件中嵌入了这样的URL:

<a href="http://www.npr.org/blogs/parallels/2014/11/11/363018388/how-the-islamic-state-wages-its-propaganda-war" data-metrics='{"action":"Click Story 1"}' >

我喜欢输出:

http://www.npr.org/blogs/parallels/2014/11/11/363018388/how-the-islamic-state-wages-its-propaganda-war

我使用的最新代码是:

file  = open("/Users/shannonmcgregor/Desktop/npr.txt", 'r')
for line in file:
    if re.search('<a href=[^>]*(islamic|praying|marines|comets|dyslexics)', line):
        print line

但是这会返回,例如:

<a href="http://www.npr.org/blogs/parallels/2014/11/11/363018388/how-the-islamic-state-wages-its-propaganda-war" data-metrics='{"action":"Click Story 1"}' >

2 个答案:

答案 0 :(得分:1)

正则表达式不是解析html文件的正确工具。因为你打算,我发布这个解决方案。

>>> import re
>>> file  = open("/Users/shannonmcgregor/Desktop/npr.txt", 'r')
>>> for i in file:
        if re.search('<a href="[^>"]*(islamic|praying|marines|comets|dyslexics)', i):
            i = re.sub(r'^.*?<a href="([^"]*)".*', r'\1', i)
            print(i)

>>> for i in file:
        if re.search('<a href="[^>"]*(islamic|praying|marines|comets|dyslexics)', i):
            print(re.search(r'^.*?<a href="([^"]*)".*', i).group(1))

答案 1 :(得分:0)

您可以使用re.findall功能将内容提取为

file  = open("/Users/shannonmcgregor/Desktop/npr.txt", 'r')
for line in file:
    if re.search('<a href=[^>]*(islamic|praying|marines|comets|dyslexics)', line):
        print re.findall(r'(?<=")[^"]*(?=")', line)[0]

将生成输出

http://www.npr.org/blogs/parallels/2014/11/11/363018388/how-the-islamic-state-wages-its-propaganda-war