如何使用lxml将这些html标签打印为文本?

时间:2014-03-25 20:23:31

标签: python html python-2.7 lxml

所以我有一个网页,其中包含大量链接。它们都包含在<li>标记内。

<li>代码位于<ol>内的<div>代码内,依此类推:

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

然后<li>标记位于<ol>

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

2 个答案:

答案 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的解决方案。