我使用PHP来刮的网站,并收集了一些数据。它不使用正则表达式全部完成。我使用PHP的爆炸()方法来找到特定的HTML标签来代替。

可能的是,如果该网站的结构改变(CSS,HTML),则错误的数据可能由刮刀收集。所以,问题是 - 我怎么知道,如果HTML结构发生了变化?如何将任何数据存储到我的数据库,以避免被错误存储数据之前确定这一点。

有帮助吗?

解决方案

我觉得你没有任何清洁的解决方案,如果你刮的页面中内容的变化。

我已经开发出多种蟒蛇刮刀,我知道如何可以令人沮丧,当网站只是做它的布局了微妙的变化。

您可以尝试的解决方案一拉机械化(不知道PHP相应),如果你是幸运的,你可以孤立你需要提取的内容(链接?)。

另一种不可能性的方法是代码的一些限制和存储之前检查它们分贝。

例如,如果您刮网址,则需要验证什么刮板已经解析是正式有效的URL;同样为整数ID或任何你想凑,可以被识别为有效。

如果您正在刮纯文本,这将是更难检查。

其他提示

如果你想知道关于结构的变化,我认为最好的方法是存储你的第一个页面的DOM结构,然后将其与新的比较。

有很多的方式,你可以做到这一点: - SAXParser的 的DOMParser等

我有一个小博客,这将给一些指点我是什么意思 的http://让 - 他们 - c.blogspot.com/2009/04/xml-as-objects-in-oops.html

或者可以使用 http://en.wikipedia.org/wiki/Simple_API_for_XML 或DOM解析器实用工具。

我的屁股说起在这里,但它可能你可能想看看一些文档对象模型PHP的方法。

http://php.net/manual/en/book.dom.php

如果我非常,非常有限的DOM的理解是正确的,在HTML网站结构变化将固定结构中更改文档对象模型,但一个简单的内容变化不会。因此,在每次刮如果你能捕捉到DOM状态,然后比较一下,能不能别在理论上确定这种变化已经取得了?

(顺便说一句,我这样做的方式,当我试图在律师资格考试结果公布后的特定页面上收到一封电子邮件,通知只是比较file_get_contents()函数值出乎意料的是,工作得十分完美:没有误报,并且一旦站点发布内容给我发电子邮件。)

依赖于网站上,但你可以再通过对这些后来擦伤的比较这些总数检测,如果页面结构已经改变算上类似div,类和风格标签刮掉网页页面元素的数量。

一个类似的过程可被用于其中每个每个类或ID的名称可以用简单的regex被提取,存储并根据需要检查的CSS文件。如果该列表中有新的补充后,页面结构几乎肯定要改变在网站上被刮掉。

首先,在某些情况下,你可能需要比较哈希的原来到新的HTML。 MD5和SHA1两种流行的哈希值。这可能会或可能不会在所有情况下有效,但是是你应该熟悉。这会告诉你,如果事情发生了变化 - 内容,标签,或任何东西。

要了解如果结构发生了变化,你会需要捕获标签出现的直方图,然后比较这些。如果你关心的标签是顺序进行,那么你就必须捕获标签的一棵树,做一个比较,看看标签出现在同一个顺序。这将是非常具体的,你想达到什么。

PHP简单的HTML DOM解析器是一个工具,它会帮你解析HTML。

Explode()不是一个HTML解析器,但你要知道在HTML结构的变化。这将是棘手的。尝试使用HTML解析器。闲来无事就能够正确地做到这一点。

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