在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 相关文章推荐
dedecms模板标签代码官方参考
Mar 17 PHP
PHP MSSQL 存储过程的方法
Dec 24 PHP
PHP 采集心得技巧
May 15 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
url decode problem 解决方法
Dec 26 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
解析php中heredoc的使用方法
Jun 17 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
php中url函数介绍及使用示例
Feb 13 PHP
php动态函数调用方法
May 21 PHP
php实现概率性随机抽奖代码
Jan 02 PHP
ThinkPHP框架实现数据增删改
May 07 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
php 全文搜索和替换的实现代码
2008/07/29 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
python装饰器初探(推荐)
2016/07/21 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
python 实现逻辑回归
2020/12/30 Python
python中的时区问题
2021/01/14 Python
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
名人演讲稿范文
2013/12/28 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书
土地转让协议书
2014/04/15 职场文书
机房搬迁方案
2014/05/01 职场文书
中职生求职信
2014/07/01 职场文书
毕业生学校组织意见
2015/06/04 职场文书
导游词之江南周庄
2019/12/06 职场文书