全网整合营销服务商

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

免费咨询热线: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优化与关键词设置指南  常州企业网站制作公司,全国继续教育网怎么登录?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  高性价比服务器租赁——企业级配置与24小时运维服务  常州企业建站如何选择最佳模板?  如何快速生成可下载的建站源码工具?  寿县云建站:智能SEO优化与多行业模板快速上线指南  长沙企业网站制作哪家好,长沙水业集团官方网站?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  香港服务器租用每月最低只需15元?  如何在香港免费服务器上快速搭建网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  网站制作需要会哪些技术,建立一个网站要花费多少?  建站之星在线版空间:自助建站+智能模板一键生成方案  Android自定义listview布局实现上拉加载下拉刷新功能  如何在阿里云高效完成企业建站全流程?  C#怎么创建控制台应用 C# Console App项目创建方法  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站之星价格显示格式升级,你的预算足够吗?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  ,怎么在广州志愿者网站注册?  如何通过VPS建站实现广告与增值服务盈利?  智能起名网站制作软件有哪些,制作logo的软件?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  如何在IIS中新建站点并解决端口绑定冲突?  历史网站制作软件,华为如何找回被删除的网站?  如何通过FTP服务器快速搭建网站?  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  如何用景安虚拟主机手机版绑定域名建站?  如何在搬瓦工VPS快速搭建网站?  如何通过山东自助建站平台快速注册域名?  如何高效生成建站之星成品网站源码?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  活动邀请函制作网站有哪些,活动邀请函文案?  如何高效配置香港服务器实现快速建站?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何通过虚拟主机快速完成网站搭建?  建站主机是否属于云主机类型?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  高防服务器:AI智能防御DDoS攻击与数据安全保障  七夕网站制作视频,七夕大促活动怎么报名?  如何在云指建站中生成FTP站点?  如何选择美橙互联多站合一建站方案?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。