2014-03-25 94 views
1

所以我有一个网页,有一个大的链接列表。它们都包含在<li>标签内。如何使用lxml将这些html标签打印为文本?

<li>标签是<ol>标签内<div>等这样的内部:

html --> body --> table --> tbody --> tr --> td --> table --> tbody --> tr --> td --> div --> ol 

然后是<li>标签是<ol>内。

如何在Python中使用lxml来将<li>标记的html作为文本打印?

+0

您是否需要使用lxml?列表(ol)或表格是否分配有ID,或者文档中只有一个表格? – mdadm

+0

与@mdadm相同的问题。我会使用BeautifulSoup(实际上使用lxml) –

+0

请提供一个实际的HTML示例。这不仅仅是描述你的问题,也是为了解答你的问题的人们提供测试他们解决方案的方法。 –

回答

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

下面的解决方案应该这样做在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]) 

我会在一分钟内用美丽的答案编辑。 编辑:请参阅亚当的解决方案。

相关问题