所以我有一个网页,其中包含大量链接。它们都包含在<li>
标记内。
<li>
代码位于<ol>
内的<div>
代码内,依此类推:
html --> body --> table --> tbody --> tr --> td --> table --> tbody --> tr --> td --> div --> ol
然后<li>
标记位于<ol>
。
如何在Python中使用lxml
将<li>
标记'html打印为文本?
答案 0 :(得分:1)
使用BeautifulSoup
(基于lxml
库)
import bs4
text = """<html>
<body>
<table>
<tbody>
<tr>
<td>
<table>
<tbody>
<tr>
<td>
<div>
<ol>
<li>
<a href="test.html" title="test title">Link Text</a>
<a href="test2.html" title="test title 2">Link2 Text</a>
</li>
</ol>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body>
</html>"""
soup = bs4.BeautifulSoup(text)
listitems = soup.select("table > tbody > tr > td > table > tbody > tr > td > div > ol > li")
tags = [tag for tag in listitems[0] if isinstance(tag,bs4.element.Tag)]
for tag in tags:
print(tag)
# OUTPUT
# <a href="test.html" title="test title">Link Text</a>
# <a href="test2.html" title="test title 2">Link2 Text</a>
答案 1 :(得分:1)
下面的解决方案应该在lxml中进行,但是,漂亮的汤可能是一个更好的解决方案,可以更好地处理格式错误的HTML。
import lxml.etree as etree
tree = etree.parse(open("test.html"))
for li in tree.iterfind(".//td/div/ol/li"):
print etree.tostring(li[0])
我会在一分钟内用漂亮的答案进行编辑。 编辑:请参阅Adam的解决方案。