8

当然,可以使用任意数量的 python 解析器来解析 HTML 页面,但令我惊讶的是,似乎没有任何公共解析脚本可以从给定的 HTML 文档中提取有意义的内容(不包括侧边栏、导航等) .

我猜这就像收集 DIV 和 P 元素,然后检查它们是否有最少的文本内容,但我确信一个可靠的实现将包括很多我没有想到的东西。

4

5 回答 5

5

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

尝试从网页中提取一般数据将需要人们以类似的方式编写他们的页面......但是几乎有无数种方法可以传达看起来相同的页面,更不用说传达相同信息的所有组合了。

您是否尝试提取特定类型的信息或其他最终目标?

您可以尝试提取“div”和“p”标记中的任何内容,并比较页面中所有信息的相对大小。那么问题是人们可能将信息分组到'div's和'p's的集合中(或者至少如果他们正在编写格式良好的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'

如果你有很多低分规则,当你发现更多相关的部分时,这些规则加起来,我认为这可能会演变成一种相当强大和强大的技术。

[EDIT2]看看可读性,它似乎完全按照我刚才的建议做!也许可以改进以更好地理解表格?

于 2009-04-28T08:28:45.640 回答
4

看看模板制造商: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>'

于 2009-04-28T12:43:09.460 回答
3

您可以使用boilerpipe Web 应用程序即时获取和提取内容。

(这并不特定于 Python,因为您只需向 Google AppEngine 上的页面发出 HTTP GET 请求)。

干杯,

基督教

于 2010-11-21T18:59:34.743 回答
1

什么是有意义的,什么是没有意义的,这取决于页面的语义。如果语义很糟糕,您的代码将不会“猜测”什么是有意义的。我使用了您在评论中链接的可读性,并且我看到在我尝试阅读的许多页面上都没有提供任何结果,而不是在谈论一个体面的结果。

如果有人将内容放在表格中,你就完蛋了。在 phpbb 论坛上尝试可读性,你会明白我的意思。

如果您想这样做,请使用正则表达式 on <p></p>,或解析 DOM。

于 2009-04-28T06:52:49.787 回答
0

Goose只是这个任务的库。引用他们的自述文件:

Goose 将尝试提取以下信息:

  • 一篇文章的主要内容
  • 文章主图
  • 文章中嵌入的任何 Youtube/Vimeo 电影
  • 元描述
  • 元标签
于 2014-07-22T23:39:26.557 回答