ppajer / domextractor
轻松从HTML和XML DOM文档中提取数据。使网页抓取变得更加整洁
Requires
This package is auto-updated.
Last update: 2024-09-05 22:47:37 UTC
README
A PHP库,用于根据自定义提取规则将HTML DOM文档中的数据提取到任何用户定义的数据结构中。
用法
安装
下载仓库并通过Composer安装,或者手动下载并将类包含到项目中。注意:此包需要ivopetkov/html5-dom-document-php来处理HTML5文档。如果您手动安装,您将需要自己管理此依赖项。
定义提取规则
规则是简单的PHP数组,表示提取器必须查找值的位置。它们由一个用于存储输出的键和一个用于匹配所需元素的CSS 选择器组成。默认情况下,将返回元素的文本值,除非您指定要返回的属性。所有提取器的指令键都以一个@为前缀,在输出中将被忽略。
基本查询和属性
该包使用CSS选择器语法从文档节点中获取值,包括文本和属性节点。最基本的规则可以写成
array(
'exampleKey' => array(
'@selector' => 'title'
)
)
// Will return:
array(
'exampleKey' => 'Example Title'
)
如果您要查找的数据在元素属性中,请在选择器中使用@符号指定它。
array(
'exampleKey' => array(
'@selector' => 'h1@class'
)
)
// Will return:
array(
'exampleKey' => 'h1 green-text site-heading'
)
列表和嵌套数据
如果您需要为单个键解析多个值,或查找嵌套数据,可以使用@each指令,并嵌套尽可能多的指令级别,这取决于您的内存限制。
array(
'exampleKey' => array(
'@selector' => '.some-list-item',
'@each' => array(
'listItemTitle' => array(
'@selector' => 'h3'
),
'listItemLink' => array(
'@selector' => 'a@href'
),
'listItemImages' => array(
'@selector' => '.carousel-item',
'@each' => array(
'src' => array(
'@selector' => 'img@src'
)
)
)
)
)
)
这将返回一个数组,其中exampleKey是一个包含有关列表中每个项目数据的数组:在这个例子中,每个h3标签的文本内容、每个a元素的href属性以及每个img元素的src属性。
array(
'exampleKey' => array(
array(
'listItemTitle' => 'Some title',
'listItemLink' => 'https://...',
'listItemImages' => array(
array('src' => 'https://...'),
array('src' => 'https://...'),
...
)
),
array(
'listItemTitle' => 'Some other title',
'listItemLink' => 'https://...',
'listItemImages' => array(
array('src' => 'https://...'),
array('src' => 'https://...'),
...
)
),
...
)
)
设置规则
一旦您的规则准备就绪,您可以通过调用setRules将它们传递给实例,或者作为构造函数的第一个参数。为了方便,提取器也可以接受其指令作为JSON字符串或来自外部JSON文件的路由。
$rules = /* array or JSON string or file path */;
// Constructor
$extractor = new DOM_Extractor($rules);
// OR Instance
$extractor = new DOM_Extractor();
$extractor->setRules($rules);
加载文档
一旦一切设置完毕,您就可以加载文档以进行解析和提取。与传递规则一样,这里也有使用构造函数的第二个参数或专用load方法的选择。
$html = file_get_contents('https://...');
// Constructor
$extractor = new DOM_Extractor($rules, $html);
// OR Instance
$extractor = new DOM_Extractor();
$extractor->load($html);
完整示例
$rules = 'some/path/to/rules.json';
$html = file_get_contents('https:/...');
// Constructor method
$extractor = new DOM_Extractor($rules, $html);
$data = $extractor->parse();
// Instance method
$extractor = new DOM_Extractor;
$extractor->setRules($rules);
$extractor->load($html);
$data = $extractor->parse();
// Also supports method chaining:
$extractor = new DOM_Extractor
$data = $extractor->setRules($rules)->load($html)->parse();
˙``