在laravel中使用Symfony的Crawler组件分析HTML
发布时间 - 2026-01-11 01:57:06 点击率:次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框架学习笔记之组件化开发实现方法
# 的是
# 第一个
# 文档
# 中去
# 小编
# 选择器
# 在此
# 不太
# 在实际
# 令人发指
# 这段
# 错了
# 我用
# 第二个
# 给大家
# 要比
# 还需要
# 可以使用
# 英语
# 太少
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python进程池调度策略_任务分发说明【指导】
如何安全更换建站之星模板并保留数据?
QQ浏览器网页版登录入口 个人中心在线进入
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
Laravel如何自定义错误页面(404, 500)?(代码示例)
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Internet Explorer官网直接进入 IE浏览器在线体验版网址
浅谈Javascript中的Label语句
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
黑客入侵网站服务器的常见手法有哪些?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Android自定义控件实现温度旋转按钮效果
敲碗10年!Mac系列传将迎来「触控与联网」双革新
如何用美橙互联一键搭建多站合一网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
英语简历制作免费网站推荐,如何将简历翻译成英文?
java ZXing生成二维码及条码实例分享
如何在香港服务器上快速搭建免备案网站?
JavaScript Ajax实现异步通信
动图在线制作网站有哪些,滑动动图图集怎么做?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel Session怎么存储_Laravel Session驱动配置详解
bing浏览器学术搜索入口_bing学术文献检索地址
如何在Windows服务器上快速搭建网站?
如何用PHP快速搭建CMS系统?
如何用好域名打造高点击率的自主建站?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
js代码实现下拉菜单【推荐】
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Android GridView 滑动条设置一直显示状态(推荐)
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
HTML 中如何正确使用模板变量为元素的 name 属性赋值
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何用IIS7快速搭建并优化网站站点?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何挑选最适合建站的高性能VPS主机?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何升级到最新版本?(升级指南和步骤)
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】

