我想从节点中提取多个url并将它们放入一个字符串数组中。目前,我将所需文本中的所有文本保存为字符串;
imgsUrl= value.text
然后我正在解析字符串并获取正确的URL。
imgsUrl[imgUrl.find("http://"):imgUrl.find(".JPG")+4]
我的问题是我需要1-200个来自imgsUrl的网址,我只能获得其中一个网址。是否有一个很好的解决方案可以将所有这些放入一个不那么繁琐的数组中?
示例输入:
sampleStr="<ul><li><a href="http://website/abc/vcd/HHD00300.JPG">HHD00300.JPG</a></li>
<li><a href="http://website/abc/vcd//HHD003002.jpg">HHD003002.jpg</a></li></ul>"
输出:
print imgUrlSubString
outputs this: http://website/abc/vcd//HHD003000.JPG
预期产出:
['http://website/abc/vcd//HHD003000.JPG','http://website/abc/vcd//HHD003002.JPG',....]
答案 0 :(得分:0)
您可以使用re.findall方法。 它直接在列表中返回所有非重叠的正则表达式匹配。
print( re.findall("http://.*?\.JPG", imgsUrl) )
使用“。*?”而不是“。*”在这种情况下很重要,因为可以有多个网址,所以你想要非贪婪的匹配。
最好的方法是使用xml解析器。 对于python,beautifulsoup和lxml非常受欢迎。
请参阅以下答案:
答案 1 :(得分:0)
这是我的答案 - 我使用lxml.html来解析HTML。使用正则表达式来解析HTML通常是一个坏主意(参见上面的@ ivan_pozdeev&#39;)
import lxml.html
sampleStr='<ul><li><a href="http://website/abc/vcd/HHD00300.JPG">HHD00300.JPG</a></li><li><a href="http://website/abc/vcd//HHD003002.jpg">HHD003002.jpg</a></li></ul>'
html = lxml.html.fromstring(sampleStr)
print html.xpath('//a/@href')
该代码使用xpath
表达式检索字符串href
中所有a
标记中的所有sampleStr
属性。
['http://website/abc/vcd/HHD00300.JPG', 'http://website/abc/vcd//HHD003002.jpg']
答案 2 :(得分:0)
您可以使用BeautifulSoup来解析此字符串。
from bs4 import BeautifulSoup
soup = BeautifulSoup(sampleStr)
links = soup.find_all("a")
output = []
for link in links:
output.append(link["href"])
这是输出:
print(output)
>>> ['http://website/abc/vcd/HHD00300.JPG', 'http://website/abc/vcd//HHD003002.jpg']