在laravel中使用Symfony的Crawler组件分析HTML


Posted in PHP onJune 19, 2017

Crawler全名是DomCrawler,是Symfony框架的组件。令人发指的是DomCrawler的没有中文文档,Symfony也没有翻译该部分,所以使用DomCrawler开发只能一点一点摸索,现将使用过程中的经验总结。

首先是安装

composer require symfony/dom-crawler
composer require symfony/css-selector

css-seelctor 是 css选择器,用css选择节点时一些函数会用到

手册里面使用的例子是

use Symfony\Component\DomCrawler\Crawler;
$html = <<<‘HTML‘
Hello World!
Hello Crawler!
HTML;
$crawler = new Crawler($html);
foreach ($crawler as $domElement)
{
var_dump($domElement->nodeName);
}

打印的结果是

string ‘html‘ (length=4)

因为这段html代码的nodeName就是html,英语不好,开始使用的时候还以为程序错了。。。

实际使用过程,如果new Crawler($html)会出现乱码问题,应该是与页面编码有关,所以可以采用下面的方式,先初始化crawler,然后添加node

$crawler = new Crawler();
$crawler->addHtmlContent($html);

addHtmlContent的第二个参数是charset,默认是utf-8。

其他例子可以参考官方文档,http://symfony.com/doc/current/components/dom_crawler.html

记录一下工作中一点点试出来的用法

filterXPath(string $xpath) 方法,按照手册上的说法,该方法的参数是$xpath,经常用的是p,div等块。

echo $crawler->filterXPath(‘//body/p‘)->text();
echo $crawler->filterXPath(‘//body/p‘)->last()->text();

输出是第一个和下一个p标签块的文本

var_dump($crawler->filterXPath(‘//body‘)->html());

输出body内的html

foreach ($crawler->filterXPath(‘//body/p‘) as $i => $node) {
$c = new Crawler($node);
echo $c->filter(‘p‘)->text();
}

filterXPath获得的是DOMElement块的数组,每个DOMElement块可以使用新的crawler对象继续解析

$nodeValues =
$crawler->filterXPath(‘//body/p‘)->each(function (Crawler $node, $i) {
return $node->text();
});

crawler提供了each循环,使用闭包函数简化代码,不过注意的是,这种写法$nodeValues得到的是数组,需要进一步处理。

其他用法

echo $crawler->filterXPath(‘//body/p‘)->attr(‘class‘);

可以获得第一个p标签对应class属性的值“message”

$crawler->filterXPath(‘//div[@class="样式"]‘)->filter(‘a‘)->attr(‘href‘);
$crawler->filterXPath(‘//div[@class="样式"]‘)->filter(‘a>img‘)->extract(array(‘alt‘, ‘href‘))

以上是获得标签属性的一些方法

filter和filterXPath不同,手册上写的是css选择器,不太明白,我理解是div这种XPath节点包含的元素,具体情况还需要在实际开发中去尝试。

总的来说感觉DomCrawler要比simple html dom好用一些,可能是我用的比较浅显。

上述只是Crawler的基本功能,更过用法请查阅symfony手册关于Crawler部分的函数

http://api.symfony.com/3.2/Symfony/Component/DomCrawler/Crawler.html

Crawler主要问题还是示例太少,函数手册里面没有使用实例,只能在实际使用中去摸索。。。。

symfony关于DomCrawler的文档,里面有少数例子

http://symfony.com/doc/current/components/dom_crawler.html

以上所述是小编给大家介绍的在laravel中使用Symfony的Crawler组件分析HTML,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
php学习之简单计算器实现代码
Jun 09 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
PHP MVC框架路由学习笔记
Mar 02 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
PHP策略模式写法
Apr 01 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 #PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 #PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 #PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 #PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 #PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 #PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 #PHP
You might like
php中请求url的五种方法总结
2017/07/13 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
JS实现的随机排序功能算法示例
2017/06/09 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python基础教程项目三之万能的XML
2018/04/02 Python
python 重定向获取真实url的方法
2018/05/11 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python批量修改xml属性的实现方式
2020/03/05 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
公司员工活动策划方案
2014/08/20 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
防卫过当辩护词
2015/05/21 职场文书
战马观后感
2015/06/08 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python