xparse / parser
解析器客户端
2.0.0
2024-01-11 11:15 UTC
Requires
- php: ^8.1
- ext-dom: *
- ext-mbstring: *
- guzzlehttp/guzzle: ^6.3 || ^7.3
- guzzlehttp/psr7: ^2.4.5
- psr/http-message: ^1.0 || ^2.0
- xparse/element-finder: ^2.0
Requires (Dev)
- ext-iconv: *
- phpunit/phpunit: ^9.3
- rector/rector: ^0.19
- roave/security-advisories: dev-latest
- symplify/easy-coding-standard: ^12.1
This package is auto-updated.
Last update: 2024-09-23 08:27:31 UTC
README
解析器客户端
安装
通过 Composer
$ composer require xparse/parser
用法
$parser = new \Xparse\Parser\Parser(); $title = $parser->get('http://funivan.com')->content('//*[@class="entry-title"]/a'); print_r($title);
使用自定义中间件
如果你使用自定义 Guzzle 中间件并且它不发送真实请求,为了获取最后一个有效的 URL,你需要手动将其设置为响应头 X-GUZZLE-EFFECTIVE-URL
。
以下是你自定义中间件中的 __invoke()
方法的示例
public function __invoke(callable $handler) : \Closure { return function (RequestInterface $request, array $options) use ($handler) { # some code return $handler($request, $options)->then(function (ResponseInterface $response) use ($request) { $response = $response->withHeader('X-GUZZLE-EFFECTIVE-URL', $request->getUri()); # some code return $response; }); }; }
递归解析器
递归解析器允许你递归地解析网站页面。你需要传递起始链接并设置下一页表达式(XPath、css 等)。
基本用法
尝试找到所有指向 GitHub 仓库的链接。我们的查询将是 xparse
。通过递归分页,我们可以遍历所有分页链接并处理每个结果页面以获取仓库链接。
use Xparse\Parser\Parser; use Xparse\Parser\RecursiveParser; # init Parser $parser = new Parser(); # set expression to pagination links and initial page url $pages = new RecursiveParser( $parser, ["//*[@class='pagination']//a/@href"], ['https://github.com/search?q=xparse'] ); $allLinks = []; foreach($pages as $page){ # set expression to fetch repository links $adsList = $page->value("//*[@class='repo-list-name']//a/@href")->all(); # merge and remove duplicates $allLinks = array_values(array_unique(array_merge($allLinks, $adsList))); } print_r($allLinks);
测试
./vendor/bin/phpunit
贡献
请参阅 CONTRIBUTING 了解详细信息。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。