微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用正则表达式在python中提取特定的URL

我已经解析了包含带有beautifulsoup的 javascript的html文档,并设法隔离其中的javascript并将其转换为字符串. javascript看起来像这样:

<script>
    [irrelevant javascript code here]
    sources:[{file:"http://url.com/folder1/v.html",label:"label1"},{file:"http://url.com/folder2/v.html",label:"label2"},{file:"http://url.com/folder3/v.html",label:"label3"}],[irrelevant javascript code here]
</script>

我试图获得一个只有这个源数组中包含的url的数组,看起来像这样:

urls = ['http://url.com/folder1/v.html','http://url.com/folder2/v.html','http://url.com/folder3/v.html']

域名是未知的IP,文件夹是随机名称长度,由小写字母和数字组成,每个文件中有1-5个(通常为3个).所有不变的是,他们以http开头,以.html结尾.

我决定使用正则表达式来处理这个问题(我很陌生),我的代码如下所示:urls = re.findall(r’http:// [^ t] [^ s“]’,document )

[^ t]存在,因为文档中还有其他网址,其域名以t开头.我的问题是,有另一个网址与我提取的网址在同一个域中的jpg,它与其他网址一起被放入urls数组.

例:

urls = ['http://123.45.67.89/asodibfo3ribawoifbadsoifasdf3/v.html'
        'http://123.45.67.89/alwefaoewifiasdof224a/v.html','http://123.45.67.89/baoisdbfai235oubodsfb45/v.html','http://123.45.67.89/i/0123/12345/aoief243oinsdf.jpg']

我怎样才能获取html网址?

解决方法

您可以使用r’“(http.*?)”’来获取文本中的网址:

>>> s="""<script>
...     [irrelevant javascript code here]
...     sources:[{file:"http://url.com/folder1/v.html",...     {file:"http://url.com/folder2/v.html",...     {file:"http://url.com/folder3/v.html",...     [irrelevant javascript code here]
... </script>"""

>>> re.findall(r'"(http.*?)"',s,re.MULTILINE|re.DOTALL)
['http://url.com/folder1/v.html','http://url.com/folder3/v.html']

ans用于提取网址列表中的.html,你可以使用str.endswith:

>>> urls = ['http://123.45.67.89/asodibfo3ribawoifbadsoifasdf3/v.html',...         'http://123.45.67.89/alwefaoewifiasdof224a/v.html',...         'http://123.45.67.89/baoisdbfai235oubodsfb45/v.html',...         'http://123.45.67.89/i/0123/12345/aoief243oinsdf.jpg']
>>> 
>>> [i for i in urls if i.endswith('html')]
['http://123.45.67.89/asodibfo3ribawoifbadsoifasdf3/v.html','http://123.45.67.89/alwefaoewifiasdof224a/v.html','http://123.45.67.89/baoisdbfai235oubodsfb45/v.html']

此外,作为此类任务的另一种通用且灵活的方式,您可以使用fnmatch模块:

>>> from fnmatch import fnmatch
>>> [i for i in urls if fnmatch(i,'*.html')]
['http://123.45.67.89/asodibfo3ribawoifbadsoifasdf3/v.html','http://123.45.67.89/baoisdbfai235oubodsfb45/v.html']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐