gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:46 28 4
gpt4 key购买 nike

我已经用 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"]+', 文档)

[^t]是因为文档中还有其他域名以t开头的url。我的问题是,还有另一个带有 jpg 的 url 来自与我正在提取的 url 相同的域,它与其他 urls 数组一起被放入 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 url?

最佳答案

您可以使用 r'"(http.*?)"' 获取文本中的 url:

>>> s="""<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>"""

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

ans 用于提取 url 列表中的 .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/alwefaoewifiasdof224a/v.html',
'http://123.45.67.89/baoisdbfai235oubodsfb45/v.html']

关于python - 使用正则表达式在 python 中提取特定的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com