如何使用Crawlers解析文档

时间:2013-05-10 04:24:49

标签: linux parsing web-crawler

我是这个主题的新手,但我的要求是使用抓取工具解析不同类型的文档(Html,pdf,txt)。请建议我使用什么爬虫来满足我的要求,并为我提供一些教程或一些如何使用爬虫解析文档的示例。

三江源。

1 个答案:

答案 0 :(得分:1)

这是一个非常广泛的问题,所以我的回答也很广泛,只涉及表面 这一切都归结为两个步骤,(1)从源头提取数据,(2)匹配和解析相关数据。

1a上。从网络中提取数据

有很多方法可以从网上抓取数据。可以使用不同的策略,具体取决于源是静态还是动态

如果数据位于静态页面上,您可以下载所有页面的HTML源代码(自动而非手动),然后从HTML源代码中提取数据。下载HTML源代码可以使用许多不同的工具(使用多种语言)来完成,即使是简单的wgetcurl也可以。

如果数据位于动态页面上(例如,如果数据位于某些表单后面,您需要进行数据库查询以查看它),那么一个好的策略是使用自动Web抓取或测试工具。其中有很多。 请参阅此Automated Data Collection resources [1]列表。如果您使用这样的工具,您可以立即提取数据,通常没有明确将HTML源保存到磁盘然后再解析它的中间步骤。

1b中。从PDF

中提取数据

首先尝试Tabula。它是一个开源Web应用程序,可以直观地从PDF中提取表格数据。

如果您的PDF没有在简单表格中整齐地构建数据,或者您有太多数据使Tabula可行,那么我建议使用* NIX命令行工具pdftotext来转换可移植文档格式(PDF)文件为纯文本。

使用命令man pdftotext查看该工具的手册页。一个有用的选项是-layout选项,它尝试在文本输出中保留原始布局。默认选项是“撤消”文档的物理布局,而是按阅读顺序输出文本。

1c上。从电子表格中提取数据

尝试xls2text转换为文字。

2。解析(HTML /文本)数据

对于解析数据,还有很多选项。例如,如果您正在处理HTML源代码,则可以使用grepsedBeautifulSoup Python库的组合,但不限于这些选项,您可以使用您熟悉的语言或工具。

当您解析和提取数据时,您实际上正在进行模式匹配。 寻找独特的模式,以便轻松隔离您所追踪的数据。

当然,一种方法是正则表达式。假设我想从名为file的文本文件中提取电子邮件地址。

egrep -io "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" file

上述命令将打印电子邮件地址[2]。如果您想将它们保存到文件中,请将> filename附加到命令的末尾。


[1]请注意,此列表并非详尽无遗。它缺少很多选择。
[2]这个正则表达式不是防弹的,有些极端情况不会涵盖。 或者,您可以使用我创建的脚本,这样可以更好地从文本文件中提取电子邮件地址。它更准确地查找电子邮件地址,更易于使用,并且您可以一次传递多个文件。您可以在此处访问它:https://gist.github.com/dideler/5219706