如何智能解析页面搜索结果返回的数据?
例如,假设我想创建一个网络服务,通过解析许多图书提供商网站的搜索结果来搜索在线图书。我可以获得页面的原始 HTML 数据,并执行一些正则表达式以使数据适用于我的 Web 服务,但是如果任何网站更改了页面的格式,我的代码就会中断!
RSS 确实是一个了不起的选择,但许多网站没有基于 XML/JSON 的搜索。
是否有任何工具包可以帮助自动传播页面上的信息?一个疯狂的想法是让模糊人工智能模块识别搜索结果页面上的模式,并相应地解析结果......
最佳答案
我最近做了一些这方面的工作,以下是我的经验。
共有三种基本方法:
- 正则表达式。
- 最灵活,最易于使用结构松散的信息和不断变化的格式。
- 更难进行结构/标签分析,但更容易进行文本匹配。
- 内置数据格式验证。
- 比其他人更难维护,因为您必须为要用于提取/转换文档的每个模式编写正则表达式
- 通常比 2 和 3 慢。
- 适用于格式相似的项目列表
- 一个好的正则表达式开发/测试工具和一些示例页面会有所帮助。我在这里对 RegexBuddy 有很多好话要说。试试他们的演示。
- 我在这方面取得了最大的成功。这种灵 active 让您可以使用讨厌的、野蛮的、原始的 HTML 代码。
- 将 HTML 转换为 XHTML 并使用 XML 提取工具。清理 HTML,将其转换为合法的 XHTML,并使用 XPath/XQuery/X-whatever 将其作为 XML 数据进行查询。
- 工具:TagSoup、HTMLTidy 等
- HTML 到 XHML 的转换质量非常重要,而且变化很大。
- 如果您需要的数据由 HTML 布局和标记(HTML 表格、列表、DIV/SPAN 组等中的数据)构建,则最佳解决方案
- 最适合获取链接结构、嵌套表格、图像、列表等
- 应该比选项 1 快,但比选项 3 慢。
- 如果内容格式发生变化/可变,但文档结构/布局不变,则效果很好。
- 如果数据不是由 HTML 标记构成的,那您就有麻烦了。
- 可与选项 1 一起使用。
- 解析器生成器(ANTLR 等) -- 创建用于解析和分析页面的语法。
- 我没有尝试过,因为它不适合我的(凌乱的)页面
- 如果 HTML 结构高度结构化、非常稳定、规则且永不改变,则最适合。
- 如果文档中有易于描述的模式,但它们不涉及 HTML 标记且涉及递归或复杂行为,则使用此选项
- 不需要 XHTML 输入
- 最快的吞吐量,通常
- 学习曲线大,但更容易维护
我修改了 web harvest对于选项 2,但我发现它们的语法有点奇怪。 XML 和一些伪 Java 脚本语言的混合。如果您喜欢 Java,并且喜欢 XML 样式的数据提取(XPath、XQuery),那么它可能适合您。
编辑:如果您使用正则表达式,请确保您使用带有惰性量词和捕获组的库! PHP 的旧正则表达式库缺少这些,它们对于在 HTML 中的打开/关闭标记之间匹配数据是必不可少的。
关于html - "Smart"网站数据的解析和使用方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223458/