我试图从一组网站(其中数千个)获取内容页面中的联系信息。在我挠头之前,我想问过像你这样的专家。我需要的只是地址,电子邮件ID,电话号码和联系人信息(如果有)。
我认为你已经理解了这个问题。是的,它是格式化...因为网站没有标准格式,所以很难确定我需要的确切信息。有些网站设计有flash联系我们页面,其他一些网站将联系信息设计为带有自定义字体的图像类型。
欢迎提示/想法/建议......
谢谢....
答案 0 :(得分:10)
这正如您所料,绝不是一项微不足道的任务。这是解决这个问题的一种方法:
使用反向索引系统(例如Lucene/Solr或Sphinx)对页面编制索引。您可能需要编写自己的爬虫/蜘蛛。 Apache Nutch和其他爬虫开箱即用。如果内容相当静态,请将它们本地下载到您的系统。
内容编入索引后,您可以通过构建布尔查询来查询电子邮件地址,电话号码等,例如: //用于电子邮件//用于电话#括号内容:@ AND(内容:.COM或内容:.NET)或内容:“(”OR内容:“)”`重要提示:上述代码不应按字面意思理解。你可以使用Lucene Regex Query& amp;跨度查询,可以让你构建非常复杂的查询。
最后在结果页面上,(a)运行结果荧光笔来获取 查询字词周围的代码段,(b)在代码段上运行 正则表达式提取出感兴趣的领域。
如果您有北美地址数据集,则可以运行 多次传递以验证地址,i)地图提供者,如Bing地图,或谷歌地图,以验证地址。据我所知,USPS和其他人提供收费的有效地址查询,以验证美国邮政编码和加拿大邮政编码。或者,ii)电子邮件地址的反向DNS查询等等......
这应该让你开始....就像我说的,这里没有单一的最佳解决方案,你需要尝试多种方法来迭代并达到你想要的准确度。
希望这有帮助。
答案 1 :(得分:3)
Conditional Random Fields已经被精确地用于这样的任务,并且相当成功。您可以使用CRF++或Stanford Named Entity Recognizer。两者都可以从命令行调用,而无需编写任何显式代码。
简而言之,您需要首先通过从网页上提供一些名称,电子邮件ID等示例来训练这些算法,以便他们学会识别这些内容。一旦这些算法变得聪明(因为你给出了它们的例子),你可以在你的数据上运行它们并看看你得到了什么。
不要害怕看维基百科页面。这些软件包附带了大量示例,您应该在几个小时内启动并运行。
答案 2 :(得分:1)
@Mikos是对的,你肯定需要多种方法。另一个可以考虑的工具是Web-Harvest。它是一种用于收集Web数据的工具,它允许您收集网站并提取您感兴趣的数据。所有这些都是通过XML配置文件完成的。该软件还有一个GUI和一个命令行界面。
它允许您使用文本/ xml操作技术,如XSLT,XQuery和Regular Expressions,您也可以构建自己的插件。但它主要关注基于HTML / XML的网站。