【问题标题】:Python: how to extract the content of a column in a tablePython:如何提取表中列的内容
【发布时间】:2012-03-10 20:22:50
【问题描述】:

我有这个 HTML 结构:

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

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

谢谢

【问题讨论】:

标签: python html parsing


【解决方案1】:

使用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)

由于所有&lt;tr&gt; 标记都有一些内容,并且您需要second 行中的数据,因此您不能只使用a.text,而是需要做一些更复杂的事情:

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

或者,如果表格行上真的只有一个&lt;div&gt;标签(&lt;tr&gt;),你也可以只遍历标签例如:

>>> 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'

【讨论】:

  • 嗯,其实标签里还有其他内容
  • 好吧,那么实际上修改你的问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 为什么需要与语言无关的东西才能从 HTML 中查找内容?
    • 因为 BeautifulSoup 技能不能转移到 Python 以外的任何其他语言。此外,BeautifulSoup 还没有被积极开发,并且已知对于 Py3k 存在错误。
    • 没有积极开发?你在说什么 - BS4 的上一次 Beta 更新是 4 天前?!
    • 我的错。自从我上次看以来,情况似乎发生了变化。当时主要开发人员说他正在放弃该项目,并且不建议将来依赖BS(正如SO上的许多其他答案所反映的那样)。
    • 很公平,为您的答案添加了+1:D
    【解决方案4】:

    我个人做了很多抓取,使用Firebug(一个非常流行的Firefox插件)来检查网站的html和布局,然后使用BeautifulSoup(Python库,广泛用于抓取信息来自网站)。这两种工具相得益彰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2020-01-13
      • 2020-04-17
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2016-09-09
      相关资源
      最近更新 更多