解析和使用网站数据的"智能"方式?

blu*_*bit 31 html parsing webpage web-services html-content-extraction

如何智能地解析搜索结果在页面上返回的数据?

例如,假设我想通过解析许多图书提供商网站的搜索结果来创建一个搜索在线图书的网络服务.我可以获取页面的原始HTML数据,并做一些正则表达式使数据适用于我的Web服务,但如果任何网站更改了页面的格式,我的代码就会中断!

RSS确实是一个了不起的选择,但许多站点没有基于XML/JSON的搜索.

是否有任何工具包可以帮助自动在页面上传播信息?一个疯狂的想法是让模糊的AI模块识别搜索结果页面上的模式,并相应地解析结果......

Bob*_*Gee 24

我最近做了一些,这是我的经历.

有三种基本方法:

  1. 常用表达.
    • 最灵活,最容易使用松散结构的信息和不断变化的格式.
    • 更难做结构/标签分析,但更容易进行文本匹配.
    • 内置数据格式验证.
    • 比其他人更难维护,因为您必须为要用于提取/转换文档的每个模式编写正则表达式
    • 通常慢于2和3.
    • 适用于类似格式的项目列表
    • 一个好的正则表达式开发/测试工具和一些示例页面将有所帮助.我在这里有关于RegexBuddy的好话​​.试试他们的演示.
    • 我在这方面取得了最大的成功.灵活性使您可以使用讨厌,野蛮,野外的HTML代码.
  2. 将HTML转换为XHTML并使用XML提取工具. 清理HTML,将其转换为合法的XHTML,并使用XPath/XQuery/X-将其作为XML数据进行查询.
    • 工具:TagSoup,HTMLTidy等
    • HTML-to-XHML转换的质量非常重要,而且变化很大.
    • 如果您想要的数据是由HTML布局和标签(HTML表格,列表,DIV/SPAN组等中的数据)构成的最佳解决方案
    • 最适合获取链接结构,嵌套表,图像,列表等
    • 应该比选项1快,但比选项3慢.
    • 如果内容格式更改/可变,但文档结构/布局不可用,则效果很好.
    • 如果数据不是由HTML标签构建的,那么您就遇到了麻烦.
    • 可与选项1一起使用.
  3. 解析器生成器(ANTLR等) - 创建用于解析和分析页面的语法.
    • 我没有尝试过这个,因为它不适合我的(杂乱)页面
    • 如果HTML结构高度结构化,非常稳定,规则且永不改变,则最合适.
    • 如果文档中有易于描述的模式,则使用此方法,但它们不涉及HTML标记并涉及递归或复杂行为
    • 不需要XHTML输入
    • 通常,吞吐量最快
    • 大学习曲线,但更容易维护

我已经对选项2的web收获进行了修改,但我发现它们的语法有点奇怪.混合使用XML和一些伪Java脚本语言.如果您喜欢Java,并且喜欢XML风格的数据提取(XPath,XQuery),它可能是您的门票.


编辑:如果您使用正则表达式,请确保使用具有延迟量词和捕获组的库!PHP的较旧的正则表达式库缺少这些,它们对于在HTML中打开/关闭标记之间匹配数据是必不可少的.