一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 在laravel中使用Symfony的Crawler組件分析HTML

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

2021-05-29 20:15tuicool PHP教程

這篇文章主要介紹了在laravel中使用Symfony的Crawler組件分析HTML,需要的朋友可以參考下

Crawler全名是DomCrawler,是Symfony框架的組件。令人發指的是DomCrawler的沒有中文文檔,Symfony也沒有翻譯該部分,所以使用DomCrawler開發只能一點一點摸索,現將使用過程中的經驗總結。

首先是安裝

?
1
2
composer require symfony/dom-crawler
composer require symfony/css-selector

css-seelctor 是 css選擇器,用css選擇節點時一些函數會用到

手冊里面使用的例子是

?
1
2
3
4
5
6
7
8
9
10
use Symfony\Component\DomCrawler\Crawler;
$html = <<<‘HTML‘
Hello World!
Hello Crawler!
HTML;
$crawler = new Crawler($html);
foreach ($crawler as $domElement)
{
var_dump($domElement->nodeName);
}

打印的結果是

?
1
string ‘html‘ (length=4)

因為這段html代碼的nodeName就是html,英語不好,開始使用的時候還以為程序錯了。。。

實際使用過程,如果new Crawler($html)會出現亂碼問題,應該是與頁面編碼有關,所以可以采用下面的方式,先初始化crawler,然后添加node

?
1
2
$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等塊。

?
1
2
echo $crawler->filterXPath(‘//body/p‘)->text();
echo $crawler->filterXPath(‘//body/p‘)->last()->text();

輸出是第一個和下一個p標簽塊的文本

?
1
var_dump($crawler->filterXPath(‘//body‘)->html());

輸出body內的html

?
1
2
3
4
foreach ($crawler->filterXPath(‘//body/p‘) as $i => $node) {
$c = new Crawler($node);
echo $c->filter(‘p‘)->text();
}

filterXPath獲得的是DOMElement塊的數組,每個DOMElement塊可以使用新的crawler對象繼續解析

?
1
2
3
4
$nodeValues =
$crawler->filterXPath(‘//body/p‘)->each(function (Crawler $node, $i) {
return $node->text();
});

crawler提供了each循環,使用閉包函數簡化代碼,不過注意的是,這種寫法$nodeValues得到的是數組,需要進一步處理。

其他用法

?
1
echo $crawler->filterXPath(‘//body/p‘)->attr(‘class‘);

可以獲得第一個p標簽對應class屬性的值“message”

?
1
2
$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,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.tuicool.com/articles/EjYRVf3

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日产精品卡一卡2卡三卡乱码工厂 | 亚洲AV久久无码精品九九软件 | 99久久综合精品免费 | 日本高清免费不卡在线 | 精品国产自在现线拍400部 | 午夜无码国产理论在线 | 国产精品成人一区二区 | 国产综合图区 | 亚洲冬月枫中文字幕在线看 | 美女脱了内裤打开腿让人羞羞软件 | ffee性xxⅹ另类老妇hd | re99| 午夜免费啪视频观看视频 | 亚洲人成影院午夜网站 | 好湿好滑好硬好爽好深视频 | 女人叉开腿让男人捅 | 国产99精品成人免费视频 | 日本大片免a费观看在线 | 美女操批 | 国产香蕉一区二区在线观看 | 国产男女性特黄录像 | 成年人免费观看视频网站 | 互换娇妻爽文100系列小说 | 亚洲精品成人A8198A片漫画 | 精品第一国产综合精品蜜芽 | 亚洲男人网 | 国产欧美日韩精品高清二区综合区 | 亚洲精品国产一区二区第一页 | www.俺去| 日韩欧美国产免费看清风阁 | 四虎在线视频免费观看 | 艾秋麻豆果冻剧传媒在线播放 | 日本三级免费看 | 日韩一区二区不卡 | 国产一区二区不卡 | 免费标准高清看机机桶机机 | 办公室强行丝袜秘书啪啪 | 青青草99热这里都是精品 | 国产高清久久 | 国产精品久久久久久岛国 | 亚洲国产午夜 |