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,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# laravel
# 组件
# laravel+vue组合的项目中引入ueditor方式(打包成组件形式)
# Laravel框架中扩展函数、扩展自定义类的方法
# PHP框架Laravel插件Pagination实现自定义分页
# laravel通过创建自定义artisan make命令来新建类文件详解
# Laravel中重写资源路由自定义URL的实现方法
# Laravel Validator自定义错误返回提示消息并在前端展示
# Laravel认证原理以及完全自定义认证详解
# 关于Laravel-admin的基础用法总结和自定义model详解
# Laravel5.5以下版本中如何自定义日志行为详解
# laravel框架学习笔记之组件化开发实现方法
# 的是
# 第一个
# 文档
# 中去
# 小编
# 选择器
# 在此
# 不太
# 在实际
# 令人发指
# 这段
# 错了
# 我用
# 第二个
# 给大家
# 要比
# 还需要
# 可以使用
# 英语
# 太少
相关文章:
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
建站主机如何选?高性价比方案全解析
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何安全更换建站之星模板并保留数据?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
Python如何创建带属性的XML节点
如何在阿里云虚拟服务器快速搭建网站?
建站VPS推荐:2025年高性能服务器配置指南
建站之家VIP精选网站模板与SEO优化教程整合指南
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
郑州企业网站制作公司,郑州招聘网站有哪些?
七夕网站制作视频,七夕大促活动怎么报名?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何用已有域名快速搭建网站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
如何用PHP工具快速搭建高效网站?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
简历在线制作网站免费版,如何创建个人简历?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
制作网站公司那家好,网络公司是做什么的?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
音乐网站服务器如何优化API响应速度?
建站主机CVM配置优化、SEO策略与性能提升指南
网站制作公司,橙子建站是合法的吗?
活动邀请函制作网站有哪些,活动邀请函文案?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何快速选择适合个人网站的云服务器配置?
建站之星安装后如何配置SEO及设计样式?
建站之星logo尺寸如何设置最合适?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之星后台密码如何安全设置与找回?
c# 在高并发场景下,委托和接口调用的性能对比
北京建设网站制作公司,北京古代建筑博物馆预约官网?
浅析上传头像示例及其注意事项
宁波自助建站系统如何快速打造专业企业网站?
制作宣传网站的软件,小红书可以宣传网站吗?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
制作网站怎么制作,*游戏网站怎么搭建?
建站168自助建站系统:快速模板定制与SEO优化指南
建站之星24小时客服电话如何获取?
已有域名和空间,如何快速搭建网站?
建站主机选购指南:核心配置优化与品牌推荐方案
如何在云服务器上快速搭建个人网站?
5种Android数据存储方式汇总
*请认真填写需求信息,我们会在24小时内与您取得联系。