Python从XML解析多个url到数组中

时间:2014-11-20 18:29:11

标签: python arrays xml

我想从节点中提取多个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',....]

3 个答案:

答案 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']