8

给定一些随机的新闻文章,我想写一个网络爬虫来找到最大的文本体,然后提取它。目的是提取页面上的物理新闻文章。

最初的计划是使用 aBeautifulSoup findAll(True)并按每个标签的值对其进行排序.getText()编辑:不要将它用于 html 工作,使用 lxml 库,它基于 python 并且比 BeautifulSoup 快得多。命令(这意味着提取所有 html 标签)

但这不适用于大多数页面,比如我作为示例列出的页面,因为大量文本被分成许多较小的标签,例如段落分隔符。

有人对这个有经验么?像这样的任何帮助都会很棒。

目前我正在使用 BeautifulSoup 和 python,但愿意探索其他可能性。


编辑:几个月后回到这个问题(哇,我听起来像个白痴^),并结合库和自己的代码解决了这个问题。

以下是一些对这项任务非常有用的 Python 库,按对我的帮助程度排序:

#1 goose 库快速、强大、一致 #2可读性库内容尚可,平均比 goose 慢,但比锅炉管快 #3 python-boilerpipe安装缓慢且难以安装,boilerpipe 库没有故障(最初在 java 中),但是事实上,这个库是建立在 java 中的另一个库之上的,它归因于 IO 时间和错误等。

如果有兴趣,我可能会发布基准。


间接相关的库,您可能应该安装它们并阅读它们的文档:

  • NLTK 文本处理库这个太好了不安装。他们提供文本分析工具以及 html 工具(如清理等)。
  • lxml html/xml 解析器上面提到过。除了可用性之外,这在各个方面都击败了 BeautifulSoup。这有点难学,但结果是值得的。HTML解析花费的时间要少得多,非常明显。
  • python webscraper 库 我认为这段代码的价值不是lib本身,而是使用lib作为参考手册来构建你自己的爬虫/提取器。它的编码/记录非常好!

使用 python 这种相当慢的语言的许多价值和力量都来自它的开源库。它们组合在一起使用时特别棒,每个人都应该利用它们来解决他们可能遇到的任何问题!

Goose 库得到了很多可靠的维护,他们刚刚添加了阿拉伯语支持,太棒了!

4

2 回答 2

5

您可能会查看python-readability包,它为您完成了这项工作。

于 2013-01-04T22:07:21.257 回答
2

我想说,你真的没有以正确的方式去做,正如上面所有的评论所证明的那样。

也就是说,这可以满足您的需求。

from bs4 import BeautifulSoup as BS
import requests
html = requests.get('http://www.cnn.com/2013/01/04/justice/ohio-rape-online-video/index.html?hpt=hp_c2').text
soup = BS(html)
print '\n\n'.join([k.text for k in soup.find(class_='cnn_strycntntlft').find_all('p')])

它只提取文本,首先通过查找所有<p>标签的主容器,然后仅选择<p>标签本身来获取文本;忽略<script>和其他不相关的。

正如评论中提到的,这仅适用于 CNN——并且可能仅适用于此页面。您可能需要为每个新网页采用不同的策略。

于 2013-01-04T20:46:02.637 回答