Python:如何提取表中列的内容

时间:2012-02-20 13:38:44

标签: python html parsing

我有这个HTML结构:

<div>
    <table>
       <tbody>
          <tr>
            <td>stuff</td>
          </tr>
          <tr>
            <td>
              <div>The content I want</div> 
           </td>
           </tr>
        </tbody>
      </table>
</div>

如何获取“我想要的内容”并删除所有html标签?

由于

4 个答案:

答案 0 :(得分:8)

使用BeautifulSoup,例如

>>> from BeautifulSoup import BeautifulSoup as bs
>>> text = """<div>
...     <table>
...        <tbody>
...           <tr>
...             <td>stuff</td>
...           </tr>
...           <tr>
...             <td>
...               <div>The content I want</div> 
...            </td>
...            </tr>
...         </tbody>
...       </table>
... </div>"""
>>> a = bs(text)

由于所有<tr>标记都包含一些内容,并且您需要来自 second 行的数据,因此您无法使用a.text,但需要多做一些事情络合物:

>>> a.table.tbody.findAll("tr")[1].div.text
u'The content I want'

或者,如果表行(<div>)上只有一个<tr>标记,您也可以遍历标记,例如:

>>> a.table.tbody.div.text
u'The content I want'

或者您可以使用lxml模块中的html解析器,如下所示:

>>> from lxml import html
>>> t = html.fromstring(text)
>>> t.xpath("table/tbody/tr[2]/td/div")[0].text
'The content I want'

答案 1 :(得分:1)

我个人已经做了大量的抓取并使用Firebug(一个非常受欢迎的Firefox插件)来检查网站的html和布局,然后使用BeautifulSoup(Python库,广泛使用用来从网站上抓取信息)。这两种工具相互补充。

答案 2 :(得分:0)

看一下BeautifulSoup,这是一个非常棒的解析HTML / XML的库。文档非常好,并且有关于如何提取特定标记的示例。

答案 3 :(得分:0)

使用像lxml这样的XML解析器。您不必删除任何内容。您只需从该div中提取数据。

由于您只有一个div,因此有效的XPath查询可能是//div

像BeautifulSoup看起来那样优雅和简单,它不像XPath表达式那样与语言无关。