2

有没有一种方法可以从原始 html 中提取所需的数据,该原始 html 是用 no IDsand无意义地编写的classes?我的意思是,假设有一个网页(个人资料)的已保存 html 文件,我想提取(比如)“爱好”之类的数据。是否可以使用 PHP 做到这一点?

4

4 回答 4

1

听起来您正在寻找一个 PHP DOM 解析器,例如这个. 如果 HTML 确实没有语义结构,那么提取所需的数据可能会有点棘手,但 DOM 解析器是开始的地方。

于 2009-11-30T17:19:05.387 回答
1

是的,该技术称为网络抓取。如果它的 html 有效,您可以使用 DOM。如果页面是动态生成的,那么生成器会使用一些结构,根据我的经验,您总是可以隔离感兴趣的元素。

如果 DOM 不适合您,您可以只使用正则表达式(这是我在编写 web-spider 时经常使用的)。正则表达式比针对 DOM 层次结构编写抓取逻辑更有效、更快。因此,您需要打开一些配置文件页面并分析静态结构。然后只需编写一个正则表达式来隔离感兴趣的字段。

于 2009-11-30T17:20:00.440 回答
1

使用正则表达式!我开玩笑,我开玩笑。如果您知道同一页面的状态,并且格式保证足够相似,那么您可以尝试编写手动解析器。或者,有很多库可以解析 html 。我对 PHP 不够熟悉,无法推荐一个,但我相信一些谷歌搜索可以带你走很长的路。以前我对 John Resig 的纯 javascript HTML 解析器很幸运。

归根结底,如果您需要来自非语义构造的 html 页面的语义信息,那么您可能注定要以编程方式失败,而您最好的选择可能是机械土耳其人

于 2009-11-30T17:23:25.457 回答
0

PHP 有两种方法。首先是使用tidy 扩展清理您的文档,使其成为有效的 XHTML,因此是格式良好的 XML,因此可以使用 XML 工具进行解析。

二是使用PHP版本的html5lib解析器,它试图将HTML5研究落实到当前的浏览器解析例程中。如果它显示在浏览器中,html5lib 可以解析它。

使用任何一种方法,您最终都会得到一个 DOM 对象,您可以使用 xpath 表达式进行查询。由于您的理论文档缺乏语义结构,因此您需要从“第 3 个 p 中的第 5 个跨度”的心态来查看文档部分。

更多信息在这里(自链接警告)。

于 2009-11-30T17:43:29.273 回答