这是我拥有的XML文档的一部分:
<tr><td>Image:</td><td>
<a href="http://live.astrometry.net/status.php?job=alpha-201104-6758393&get=fullsize.png">fullsize.png</a></td></tr>
我需要在<a>
元素后面提取内容为'Image:'的<td>
元素的href属性。 <a>
元素没有我可以使用的其他id或class属性。
对不起,如果这听起来很复杂
提前致谢!
答案 0 :(得分:2)
好的,最后的优雅(我希望;)回答一个XPath表达式
from lxml import etree
root = etree.fromstring(your_text)
print root.xpath("//td[contains(text(), 'Image')]/following-sibling::td/a/@href")[0]
答案 1 :(得分:1)
如果您的输入文件与摘录类似,则以下代码可能会对您有所帮助:
from xml.dom.minidom import parseString
def tdlinks(xml):
o = []
l = parseString(xml).getElementsByTagName('td')
while l != []:
if l[0].firstChild.wholeText == unicode('Image:') and len(l) > 1:
if l[1].getElementsByTagName('a') != []:
o.append(l[1].getElementsByTagName('a')[0].getAttribute('href'))
l.pop(1)
l.pop(0)
return o
看看minidom文档。如果您在执行过程中发现任何异常,它可能会帮助您改进代码。
答案 2 :(得分:0)
使用lxml http://lxml.de/xpathxslt.html
您的XPath看起来像/tr/td[1]/a
来获取元素,然后您可以el.attrib['href']
你可以在没有XPath的情况下实际遍历树,但它是非常强大且有用的工具
答案 3 :(得分:0)
from xml.dom import minidom
dom = minidom.parseString("""<tr><td>Image:</td><td>
<a href="http://live.astrometry.net/status.php?job=alpha-201104-6758393&get=fullsize.png">fullsize.png</a></td></tr>
""")
print dom.toxml() + "\n"
links = (a.attributes['href'].value for a in dom.getElementsByTagName('a')
if a.parentNode.nodeName == 'td' and a.parentNode.previousSibling.firstChild.data == 'Image:')
for link in links:
print link
结果:
<?xml version="1.0" ?><tr><td>Image:</td><td>
<a href="http://live.astrometry.net/status.php?job=alpha-201104-6758393&get=fullsize.png">fullsize.png</a></td></tr>
http://live.astrometry.net/status.php?job=alpha-201104-6758393&get=fullsize.png