一个人如何明智地分析返回的数据搜索结果页面上的?

例如,可以说,我想创建一个网服务,搜索的在线书籍,通过分析的搜索结果中的许多本书提供者的网站。我能得到原HTML数据的网页,并做一些regexs使数据的工作为我的网服务,但如果任何网站的改变格式的网页,我的代码的休息时间!

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

是否有任何工具包,帮助传播信息的网页自动?一个疯狂的想法将是要有一个模糊AI模块的认识模式搜索结果页上,并且分析的结果,因此...

有帮助吗?

解决方案

我已经做了一些这方面最近,这里是我的经验。

有三个基本方法:

  1. Regular Expressions.
    • 最灵活、最简单的使用松散的结构化信息和改变格式。
    • 很难做到的结构/标记的分析,但容易做的文字匹配。
    • 建立验证的数据格式。
    • 难以维持比其他人,因为你必须要写一个经常的表达,为每一个图案你要用于提取/变换的文件
    • 通常慢于2和3。
    • 适用于列出的同样格式的项目
    • 一个很好的regex开发和测试工具和一些样品的网页将有所帮助。我有好东西要说RegexBuddy在这里。试试自己的演示。
    • 我有过的最成功与此有关。灵活性可以让你的工作与讨厌的,野蛮的,野生HTML代码。
  2. Convert HTML to XHTML和使用XML提取的工具。 清理HTML,将其转化为法律XHTML,并使用XPath/属/X-什么以查询为XML数据。
    • 工具:TagSoup,HTMLTidy,等等
    • 质量HTML到XHML转换是非常重要的,并且高度变量。
    • 最好的解决方案,如果数据结构是由HTML布局和标签(数据HTML表、列表格/跨组等)
    • 最适合越来越链接的结构、嵌套表格、图像,列出了等等
    • 应该快于备选案文1,但低于备选方案3.
    • 运作良好,如果内容格式的变化/可变,但文件的结构/局没有。
    • 如果数据不结构通过HTML tags,你就有麻烦了。
    • 可以使用与选项1。
  3. 析生成器(这些代码等) -创建一个语法分析分析网页。
    • 我还没有尝试过这一点,因为它不适用于我(混乱)网页
    • 最合适的,如果HTML结构高度结构化的、非常不断的、定期的,并永远不会改变。
    • 使用这个,如果有容易描述的模式在文件中,但它们不涉及HTML tags和涉及递归或复杂的行为
    • 不需要输入XHTML
    • 最快的吞吐量,一般
    • 大的学习曲线,但更容易保持

我已经修改 网收获 用于选择2下,但我找到他们的语法可能有点奇怪。混合的XML和一些伪Java脚本语言。如果你喜欢Java,XML等式数据提取(XPath,属)可能票给你。


编辑:如果你使用普通的表达,确保使用图书馆与懒量和捕获。PHP的老年regex图书馆缺乏这些,他们是不可或缺的匹配数据之间开/闭的标签HTML。

其他提示

如果没有一个的固定 HTML结构解析,我不想保持正则表达式查找的数据。你可能有更多的运气通过构建树合适解析器解析HTML。然后选择元素...这将是更好的可维护性。

显然,最好的方法是从发动机一些XML输出具有固定的标记,可以解析和验证。我想一个HTML解析库的一些“黑暗”探测产生的树会更简单,以保持比正则表达式。

这样,你只需要检查<a href="blah" class="cache_link">...变成<a href="blah" class="cache_result">...或什么的。

底线,grepping特定元素与正则表达式将是严峻。更好的方法是构建喜欢网页的模型DOM和寻找“锚”字符数据的标签。

发送电子邮件以现场陈述的XML API的情况下......你可能会聘请!

你还没有提及其技术堆的使用。如果你分析HTML,我会使用分析的图书馆:

还有web服务,做到你在说什么-商业和自由。他们刮点和提供服务接口。

和一个通用的服务,提供了一些画面刮是雅虎的管道。 以前的计算器问题上,

不幸的是“刮”是最常见的解决方案,如你所说试图从网站解析HTML。你可以检测到页面,标志警报,为您解决结构性变化,所以在其末端的改变不会导致烧伤的数据。直到语义网是现实的,这几乎是保证大型数据集的唯一途径。

或者,也可以粘到由API所提供的小的数据集。雅虎都很努力通过API(参见YDN)提供可搜索的数据,我认为亚马逊的API开放了很多书数据等等。

希望帮助一点点!

编辑:如果你正在使用PHP,我建议SimpleHTMLDOM

您看着使用HTML处理库? Ruby有一些相当不错的。例如角度来说,Hpricot

通过一个好的图书馆,你可以指定要使用CSS选择器或XPath页面的部分。这将是一个很好的协议更强大的比使用正则表达式。

这角度来说,Hpricot维基示例:

 doc = Hpricot(open("qwantz.html"))
 (doc/'div img[@src^="http://www.qwantz.com/comics/"]')
   #=> Elements[...]

我相信你会发现,做在.NET或Python等类似的事情一个图书馆。

尝试谷歌上搜索屏幕刮+的语言你更喜欢。我知道几个选项的蟒蛇,你可以找到同等的用语:

  • 美丽的汤
  • 机械化:类似于perl WWW:机械化.给你一个浏览器就像对象ineract的网页
  • lxml:蟒蛇结合libwww
  • scrapemark:使用模板刮件的页面
  • pyquery:可以让你做jQuery查询在xml/xhtml文件
  • 抓取器:一个高级别刮和网爬行框架,用于编写蜘蛛爬和分析网页

根据不同的网站上刮你可能需要使用一个或更多的方法上。

如果你可以使用像标记汤,那会是一开始的地方。然后,你可以把网页就像一个XML API,有点。

它有一个Java和C ++实现,可能工作!

欧芹在 http://www.parselets.com 看起来非常光滑。

它允许您定义“parslets”使用JSON你确定要寻找什么,在页面上,然后将其解析什么是适合你的数据了。

正如其他人所说,可以使用一个HTML解析器构建DOM表示和使用XPath / XQuery的查询。我发现这里一个很有趣的文章:Java理论与实践:用XQuery进行屏幕搜集 - 的 http://www.ibm.com/developerworks/xml/library/j-jtp03225.html

公平足够,我要使用标记汤方法的建议。

将作为后续问题 - 如何在地球上那些大刮板式网站做呢?我已经看到,扫描数千个网站的职位搜索引擎(例如indeed.com)!那是成千上万的正则表达式的?其几乎不可能...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top