我有这个HTML结构:
<div>
<table>
<tbody>
<tr>
<td>stuff</td>
</tr>
<tr>
<td>
<div>The content I want</div>
</td>
</tr>
</tbody>
</table>
</div>
如何获取“我想要的内容”并删除所有html标签?
由于
答案 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表达式那样与语言无关。