html - "Smart"网站数据的解析和使用方式?

标签 html web-services parsing webpage html-content-extraction

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

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

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

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

最佳答案

我最近做了一些这方面的工作,以下是我的经验。

共有三种基本方法:

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

我修改了 web harvest对于选项 2,但我发现它们的语法有点奇怪。 XML 和一些伪 Java 脚本语言的混合。如果您喜欢 Java,并且喜欢 XML 样式的数据提取(XPath、XQuery),那么它可能适合您。


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

关于html - "Smart"网站数据的解析和使用方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223458/

相关文章:

java - 将RequestDTO和ResponseDTO添加到公共(public)DTO中还是单独使用?

rest - 在 Rest 中使用 POST 进行删除/更新?

android 从 List Activity 切换到 Activity

ios - 暂停/继续解析 PEGKit 解析器?

html - 是否可以使用 gulp 将带有特定变量的 scss 提取到 css 中?

javascript - 如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示形式?

jquery - 如何将此 jquery 菜单移动到我想要的位置?

jquery - flexbox 的 slideDown 动画

asp.net - ASP.net JSON Webservice 响应类型的问题

php - 如何修复从 HTML 中提取的纯文本的句子间距?