提取HTML页面内容(排除导航)的Python方法

8 投票
5 回答
3938 浏览
提问于 2025-04-15 11:17

当然,HTML页面可以用很多种Python解析器来解析,但我很惊讶的是,似乎没有公开的解析脚本可以从给定的HTML文档中提取有用的内容(不包括侧边栏、导航等)。

我猜这可能是收集一些DIV和P元素,然后检查它们是否有足够的文字内容,但我相信一个好的实现会包含很多我没有想到的东西。

5 个回答

3

你可以使用boilerpipe网页应用来快速获取和提取内容。

(这并不是Python特有的,因为你只需要向Google AppEngine上的一个页面发送一个HTTP GET请求就可以了。)

祝好,

克里斯蒂安

4

看看这个工具,叫做templatemaker:http://www.holovaty.com/writing/templatemaker/

这个工具是Django的创始人之一写的。简单来说,你只需要给它几个示例的html文件,它就能生成一个“模板”,你可以用这个模板来提取出不同的部分(通常是一些有意义的内容)。

这里有一个来自谷歌代码页面的例子:


# Import the Template class.
>>> from templatemaker import Template

# Create a Template instance.
>>> t = Template()

# Learn a Sample String.
>>> t.learn('<b>this and that</b>')

# Output the template so far, using the "!" character to mark holes.
# We've only learned a single string, so the template has no holes.
>>> t.as_text('!')
'<b>this and that</b>'

# Learn another string. The True return value means the template gained
# at least one hole.
>>> t.learn('<b>alex and sue</b>')
True

# Sure enough, the template now has some holes.
>>> t.as_text('!')
'<b>! and !</b>'

5

可以试试Python的Beautiful Soup库。它有非常简单的方法,可以从html文件中提取信息。

如果想要从网页中通用地提取数据,就需要大家写网页的方式差不多……但是网页的表现形式几乎是无穷无尽的,虽然看起来一样,但传达同样信息的方式有很多种组合。

你是想提取某种特定的信息,还是有其他的目标呢?

你可以尝试提取所有在'div'和'p'标签里的内容,并比较页面中所有信息的相对大小。问题是,人们通常会把信息分组到'div'和'p'中(至少如果他们写的是格式良好的html的话!)。

也许如果你能把信息的关系形成一个树状结构(节点可以是'p'或'div',每个节点里包含相关的文本),你就可以进行某种分析,找出包含大部分信息的最小的'p'或'div'?

[编辑]也许如果你能把它整理成我建议的树状结构,你就可以用类似于垃圾邮件过滤器的积分系统。定义一些规则来尝试分类信息。比如:

+1 points for every 100 words
+1 points for every child element that has > 100 words
-1 points if the section name contains the word 'nav'
-2 points if the section name contains the word 'advert'

如果你有很多低分的规则,当你找到更多相关的部分时,这些规则的分数会累加,我觉得这可能会发展成一种相当强大和稳健的技术。

[编辑2]看起来这个可读性工具几乎正好在做我刚才提到的事情!也许可以改进一下,让它更好地理解表格?

撰写回答