我已经解析了包含带有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>
我正在尝试获取一个只有这个sources数组中包含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网址?
答案 0 :(得分:3)
您可以使用 ls *
1:
prop
2:
prop
3:
$ find . -mindepth 1 -maxdepth 1 -type d '!' -exec test -e "{}/prop" ';' -print
./3
获取文字中的网址:
r'"(http.*?)"'
用于提取您可以使用的>>> 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']
网址列表中的.html
:
str.endswith
另外,作为此类任务的另一种通用且灵活的方法,您可以使用look for directories that don't contain your specific file模块:
>>> 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']
答案 1 :(得分:1)
如果格式始终与{file:url
相同,请查找{file:
后引号之间的子字符串:
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>"""
print(re.findall("\{file\:\"(.*?)\"",s))
['http://url.com/folder1/v.html', 'http://url.com/folder2/v.html', 'http://url.com/folder3/v.html']
您还可以通过在源代码上拆分一次来限制字符串搜索:
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>"""
print(re.findall("\{file\:\"(.*?)\"",s.split("sources:[",1)[1]))
哪会删除sources:[
之前的所有其他行,假设没有其他sources:[
。
答案 2 :(得分:1)
这样的东西?
re.findall(r'http://[^t][^s"]+\.html', document)