全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。