shamanhead / phpporser
高级解析器,用于高级任务
v0.3
2021-06-09 17:40 UTC
Requires
- php: >=7.2
- chrome-php/chrome: ^v0.10.0
README
-
入门指南
- 需求
- 通过composer安装
- 通过存档安装
- 安装chromium可执行文件
- 解析第一页
- 搜索方法
- 处理文本
- 贡献
- 许可证
入门指南
需求
需要 PHP 7.1+。此外还需要 Headless Chromium PHP 和 chromium可执行文件,如果您想使用此库支持无头浏览(包含在Packagist版本中)。
通过composer安装
$ composer require shamanhead/phpporser
通过存档安装
您也可以从存档中安装此库,通过从GitHub下载。除了 Headless Chromium PHP 之外,无需任何依赖项,如果您想使用此库的无头浏览功能。安装chromium可执行文件如果您想使用此库与无头浏览器一起使用,首先需要下载此浏览器的可执行文件。这可能适用于Windows、MacOs和Linux。
选择您想要使用的浏览器
无头chromium支持所有基于Chrome的浏览器,如Chrome、Opera、Chromium等。安装chromium可执行文件
我建议使用chromium而不是chrome,因为我的观察表明它比chrome表现更好。因此,前往 官方chromium浏览器下载页面 并下载。
完成此步骤后,解压缩存档并将其移动到必要的位置。
然后,在您的脚本中指定路径
require_once "vendor/autoload.php"; use HeadlessChromium\Page; use ShamanHead\PhpPorser\App\Dom as Dom; $dom = new Dom(); $dom->setHref('file:///home/shamanhead/dev/porser/phpporser-master/test.html'); $dom->setBrowserPath('PATH_TO_CHROME');
如果您正确完成,解析器将工作。如果您在此步骤中遇到任何错误,您可以查看这里,是否有解决您问题的方法。否则,请在此或Headless Chromium PHP 页面上打开新问题。
解析第一页
呃,工作完成了一半。那么现在,让我们尝试解析一个简单的页面,比如维基百科上的计算机科学。通过它,我将展示解析器的所有功能。首先,让我们尝试获取页面顶部上的'Computer sciense'字符串
<?php require_once "vendor/autoload.php"; use ShamanHead\PhpPorser\App\Dom as Dom; $dom = new Dom(); $dom->setHref('https://en.wikipedia.org/wiki/Computer_science'); print_r($dom->tag('h1')->class('firstHeading')->text()->merge()); ?>
它工作了!但是如何?让我来解释一下
- 解析器获取所有名为'h1'的标签
- 然后解析器获取h1标签范围内所有带有'class' 'firstHeading'的标签及其依赖项
- 从中获取文本
- 将结果数组转换为字符串格式
搜索方法
为了在HTML DOM中查找元素,此库中有4个函数<?php require_once "vendor/autoload.php"; use ShamanHead\PhpPorser\App\Dom as Dom; $dom = new Dom(); $dom->setHref('href to file'); print_r($dom->tag('h1')->array()); //finds by tag name 'h1' print_r($dom->id('firstHeading')->array()); //finds by id name 'firstHeading' print_r($dom->class('wrapper__main')->array()); //finds by class name 'wrapper_main' print_r($dom->custom(['name', 'button'])->array()); //finds by 'name' attribute value 'button' ?>
您可以组合搜索方法,以特殊方式查找元素
<?php require_once "vendor/autoload.php"; use ShamanHead\PhpPorser\App\Dom as Dom; $dom = new Dom(); $dom->setHref('href to file'); print_r($dom->class('main')->id('firstHeading')->tag('h1')->array()); ?>
处理文本
<?php require_once "vendor/autoload.php"; use ShamanHead\PhpPorser\App\Dom as Dom; $dom = new Dom(); $dom->setHref('href to file'); $divText = $dom->tag('div')->id('someDiv')->text(); $divText->contents(); //Returns all text in array form. $divText->merge('symbol'); //Returns all text in string form with 'symbol' separator //'\n' by default. $divText->first(); //Returns first founded text. $divText->last(); //Returns last founded text. ?>