queryList爬蟲獲取內容的幾種方法總結 queryList給抓取的內容增加html追加元素html 代碼實例...

//簡略內容:
1.
$data1 = $ql->find('.two img')->map(function($item){return $item->alt;
});
// 等價下面這句話
$data2 = $ql->find('.two img')->attrs('alt');2.
$texts = $ql->find('.two>a')->texts();
$htmls = $ql->find('#one span')->htmls();3.
$ql = QueryList::get('https://www.ithome.com/html/discovery/358585.htm');
$rt = [];
// 采集文章標題
$rt['title'] = $ql->find('h1')->text();4.采集列表所有  用all
$rt = QueryList::get($url)->rules($rules)->query()->getData();
print_r($rt->all());
//QueryList V4.0.4版本新增了一個queryData()語法糖來簡化這種操作:
$rt = QueryList::get($url)->rules($rules)->queryData();
queryData()方法等同于query()->getData()->all()

$ql = QueryList::html($html); // 獲取div元素對象 $div = $ql->find('div:eq(0)'); // 向div元素中追加一個img元素 queryList給抓取的內容增加html追加元素html
//(在元素操作頁面文檔 不是結果處理 http://www.querylist.cc/docs/guide/v4/modify-dom)
$div->append('<img src="1.jpg" />');
//獲取HTTP響應頭等信息 use GuzzleHttp\Client;$client = new Client(); $response = $client->get('http://httpbin.org/get'); // 獲取響應頭部信息 $headers = $response->getHeaders();//內容過濾 // 采集正文內容 $eles = QueryList::html($html)->find('#content'); // 選擇正文內容中要移除的元素,并移除 $eles->find('.tt,span:last,p:last')->remove(); //獲取純凈的正文內容 $content = $eles->html();$rt = QueryList::rules($rules)->html($html)->query()->getData();$rt = QueryList::rules($rules)->html($html)->query()->getData(function($item){$ql = QueryList::html($item['content']);$ql->find('.tt,span:last,p:last')->remove();$item['content'] = $ql->find('')->html();return $item;});//QueryList內置的HTTP客戶端 //更多高級參數 //還可以攜帶更多高級參數,如:設置超時時間、設置代理等。 $ql = QueryList::get('http://httpbin.org/get',['param1' => 'testvalue','params2' => 'somevalue' ],[// 設置代理'proxy' => 'http://222.141.11.17:8118',//設置超時時間,單位:秒'timeout' => 30,'headers' => ['Referer' => 'https://querylist.cc/','User-Agent' => 'testing/1.0','Accept' => 'application/json','X-Foo' => ['Bar', 'Baz'],'Cookie' => 'abc=111;xxx=222']]);//使用文件緩存驅動 //// 緩存文件夾路徑 //$cache_path = __DIR__.'/temp/'; $ql = QueryList::get($url,null,['cache' => $cache_path,'cache_ttl' => 600 // 緩存有效時間,單位:秒,可以不設置緩存有效時間 ]);//使用 HTTP Cache //use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; QueryList::multiGet($urls)->success(function(QueryList $ql,Response $response, $index) use($urls){echo 'Current url: '.$urls[$index]."\r\n";$data = $ql->find('h3>a')->texts();print_r($data->all());})->send();//更高級的用法//use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; // //$rules = [ // 'name' => ['h3>a','text'], // 'desc' => ['.py-1','text'] //]; //$range = '.repo-list>li'; QueryList::rules($rules)->range($range)->multiGet($urls)// 設置并發數為2->concurrency(2)// 設置GuzzleHttp的一些其他選項->withOptions(['timeout' => 60])// 設置HTTP Header->withHeaders(['User-Agent' => 'QueryList'])// HTTP success回調函數->success(function (QueryList $ql, Response $response, $index){$data = $ql->queryData();print_r($data);})// HTTP error回調函數->error(function (QueryList $ql, $reason, $index){// ... })->send();//詳細版 1. $data1 = $ql->find('.two img')->map(function($item){return $item->alt; }); // 等價下面這句話 $data2 = $ql->find('.two img')->attrs('alt');print_r($data1->all());2. $texts = $ql->find('.two>a')->texts(); $htmls = $ql->find('#one span')->htmls();print_r($texts->all());3. use QL\QueryList;$ql = QueryList::get('https://www.ithome.com/html/discovery/358585.htm');$rt = []; // 采集文章標題 $rt['title'] = $ql->find('h1')->text();4.采集列表所有 用all //use QL\QueryList;//$url = 'https://www.ithome.com/html/discovery/358585.htm'; //// 定義采集規則 //$rules = [ // // 采集文章標題 // 'title' => ['h1','text'], // // 采集文章作者 // 'author' => ['#author_baidu>strong','text'], // // 采集文章內容 // 'content' => ['.post_content','html'] //]; $rt = QueryList::get($url)->rules($rules)->query()->getData(); print_r($rt->all());$rt = QueryList::get($url)->rules($rules)->query()->getData(); print_r($rt->all()); //QueryList V4.0.4版本新增了一個queryData()語法糖來簡化這種操作: $rt = QueryList::get($url)->rules($rules)->queryData(); queryData()方法等同于query()->getData()->all()//QueryList內置的HTTP客戶端 //更多高級參數 //還可以攜帶更多高級參數,如:設置超時時間、設置代理等。 $ql = QueryList::get('http://httpbin.org/get',['param1' => 'testvalue','params2' => 'somevalue' ],[// 設置代理'proxy' => 'http://222.141.11.17:8118',//設置超時時間,單位:秒'timeout' => 30,'headers' => ['Referer' => 'https://querylist.cc/','User-Agent' => 'testing/1.0','Accept' => 'application/json','X-Foo' => ['Bar', 'Baz'],'Cookie' => 'abc=111;xxx=222']]);//使用文件緩存驅動 //// 緩存文件夾路徑 //$cache_path = __DIR__.'/temp/'; $ql = = QueryList::get($url,null,['cache' => $cache_path,'cache_ttl' => 600 // 緩存有效時間,單位:秒,可以不設置緩存有效時間 ]);//使用 HTTP Cache //use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; QueryList::multiGet($urls)->success(function(QueryList $ql,Response $response, $index) use($urls){echo 'Current url: '.$urls[$index]."\r\n";$data = $ql->find('h3>a')->texts();print_r($data->all());})->send();//更高級的用法//use GuzzleHttp\Psr7\Response; //use QL\QueryList; // //$urls = [ // 'https://github.com/trending/go?since=daily', // 'https://github.com/trending/html?since=daily', // 'https://github.com/trending/java?since=daily' //]; // //$rules = [ // 'name' => ['h3>a','text'], // 'desc' => ['.py-1','text'] //]; //$range = '.repo-list>li'; QueryList::rules($rules)->range($range)->multiGet($urls)// 設置并發數為2->concurrency(2)// 設置GuzzleHttp的一些其他選項->withOptions(['timeout' => 60])// 設置HTTP Header->withHeaders(['User-Agent' => 'QueryList'])// HTTP success回調函數->success(function (QueryList $ql, Response $response, $index){$data = $ql->queryData();print_r($data);})// HTTP error回調函數->error(function (QueryList $ql, $reason, $index){// ... })->send();//獲取HTTP響應頭等信息 use GuzzleHttp\Client;$client = new Client(); $response = $client->get('http://httpbin.org/get'); // 獲取響應頭部信息 $headers = $response->getHeaders();//內容過濾 // 采集正文內容 $eles = QueryList::html($html)->find('#content'); // 選擇正文內容中要移除的元素,并移除 $eles->find('.tt,span:last,p:last')->remove(); //獲取純凈的正文內容 $content = $eles->html();//$rules = [ // // 移除內容中所有的超鏈接,但保留超鏈接的內容,并移除內容中所有p標簽,但保留p標簽的內容 // 'content_html' => ['#content','html','a p'], // // 保留內容中的超鏈接,以及保留p標簽及內容 // 'content_text' => ['#content','text','a p'], //]; $rt = QueryList::rules($rules)->html($html)->query()->getData();// //$rules = [ // 'content' => ['#content','html'] //]; $rt = QueryList::rules($rules)->html($html)->query()->getData(function($item){$ql = QueryList::html($item['content']);$ql->find('.tt,span:last,p:last')->remove();$item['content'] = $ql->find('')->html();return $item;});

?

$data1 = $ql->find('.two img')->map(function($item){? ? return $item->alt;});$data1 = $ql->find('.two img')->map(function($item){? ? return $item->alt;});// 等價下面這句話$data2 = $ql->find('.two img')->attrs('alt');
print_r($data1->all());$texts = $ql->find('.two>a')->texts();$htmls = $ql->find('#one span')->htmls();
print_r($texts->all());

轉載于:https://www.cnblogs.com/stillstep/p/10953512.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248842.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248842.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++解析-外傳篇(1):異常處理深度解析

0.目錄 1.異常的最終處理 2.結束函數terminate() 3.小結 1.異常的最終處理 問題&#xff1a; 如果在main函數中拋出異常會發生什么&#xff1f; 如果異常不處理&#xff0c;最后會傳到哪里&#xff1f; 下面的代碼的輸出什么&#xff1f; 示例——異常的最終處理&#xff1f;&a…

《淺談架構之路:前后端分離模式》 - 山人行 - 博客園

前言&#xff1a;分離模式 對前后端分離研究了一段時間&#xff0c;恰逢公司有一個大項目決定嘗試使用前后端分離模式進行&#xff0c;便參與其中。該項目從2016年初立項至今&#xff0c;平平穩穩得度過&#xff0c;但也涌現出越來越多的問題&#xff0c;絕對不是說前后端分離模…

springboot快速集成swagger

今天技術總監說&#xff1a;小明&#xff0c;我們本次3.0改造&#xff0c;使用swagger2.0作為前后端分離的接口規范&#xff0c;它可以一鍵生成前后端的API,一勞永逸……小明&#xff1a;&#xff1f;&#xff1f;&#xff1f; Spring Boot 框架是目前非常流行的微服務框架&…

php curl處理get和post請求

CURL 是一個利用URL語法規定來傳輸文件和數據的工具&#xff0c;支持很多協議&#xff0c;如HTTP、FTP、TELNET等。最爽的是&#xff0c;PHP也支持 CURL 庫。使用PHP的CURL 庫可以簡單和有效地去抓網頁。你只需要運行一個腳本&#xff0c;然后分析一下你所抓取的網頁&#xff0…

【Web】JavaWeb項目為什么我們要放棄jsp?為什么要前后端解耦?為什么要前后端分離?2.0版,為分布式架構打基礎。 - CSDN博客

前戲 前后端分離已成為互聯網項目開發的業界標準使用方式&#xff0c;通過nginxtomcat的方式&#xff08;也可以中間加一個nodejs&#xff09;有效的進行解耦&#xff0c; 并且前后端分離會為以后的大型分布式架構、彈性計算架構、微服務架構、多端化服務&#xff08;多種客戶…

MongoDB升級導致啟動失敗

起因 最近項目使用MongoDB,但是作為一個技術菜鳥&#xff0c;NoSQL數據庫我還真不會用&#xff0c;于是我就在自己的阿里云服務器上安裝了一個MongoDB4.0.9。 現象 但是當我使用yum -y update升級以后&#xff0c;MongoDB無法啟動了&#xff0c;即使重裝刪除了MongDB的文件了還…

測者的測試技術手冊:揭開java method的一個秘密--巨型函數

揭開java method的一個秘密&#xff1a;巨型函數 相信&#xff0c;很多人都不知道Java的Method的上限為64K。本文將超過這個上限的函數叫做巨型函數。 巨型函數的問題 1、如果代碼超過了這個限制&#xff0c;Java編譯器就報"Code too large to complier"的錯誤。 2、…

前端攻略系列(二) - 前端各種面試題

幸運且光榮的被老大安排了一個任務 - “去整理些前端面試題”。年前確實不是招人的好時候&#xff0c;所以我們前端團隊經過了超負荷的運轉&#xff0c;終于堅持過了春節。春節以后就開始招人啦&#xff0c;這套題考察的目標就是基礎基礎再基礎&#xff0c;嘿嘿。 事先聲明&…

html 初識

一、web請求流程模擬 python編寫的簡易服務器應用程序 import socketserversocket.socket() ip_port (127.0.0.1,8080) server.bind(ip_port) server.listen()while 1:conn, addr server.accept()from_browser_msgconn.recv(1024)print(from_browser_msg)conn.send(bHTTP/1.1 …

Iframe的那些事

在web開發中&#xff0c;經常會用到iframe&#xff0c;難免會碰到需要在父窗口中使用iframe中的元素、或者在iframe框架中使用父窗口的元素 js 在父窗口中獲取iframe中的元素 1、 格式&#xff1a;window.frames["iframe的name值"].document.getElementByIdx_x(…

異常處理try...catch...throw

C 引入了異常處理機制。其基本思想是&#xff1a;函數 A 在執行過程中發現異常時可以不加處理&#xff0c;而只是“拋出一個異常”給 A 的調用者&#xff0c;假定為函數 B。 拋出異常而不加處理會導致函數 A 立即中止&#xff0c;在這種情況下&#xff0c;函數 B 可以選擇捕獲 …

Makefile 中:= ?= += =的區別

是最基本的賦值: 是覆蓋之前的值? 是如果沒有被賦值過就賦予等號后面的值 是添加等號后面的值轉載于:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/10118039.html

原生JS寫Ajax的請求函數

本文主要介紹了如何通過原生JavaScript封裝ajax請求&#xff0c;文中給出了具體的實現代碼和詳細的解釋&#xff0c;希望對你有所幫助。 一、JS原生Ajax ajax&#xff1a;一種請求數據的方式&#xff0c;不需要刷新整個頁面&#xff1b; ajax的技術核心是 XMLHttpRequest 對象&…

軟件工程--第十三周學習進度

第十三周代碼量258 所花時間 6h博客量 2篇了解到的知識點 在尋找“水王”程序編寫時&#xff0c;學習了一種新的設計思想&#xff0c;兩兩刪除法&#xff0c;最后剩下的就是水王。這種設計思想&#xff0c;感覺可以用到多種編程&#xff0c;感覺很有意思。轉載于:https://www.c…

如何使用 tf object detection

# 如何使用 tf object detectionhttps://juejin.i m/entry/5a7976166fb9a06335319080https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9https://towardsdatascience.com/building-a-toy-detector-with…

WEB文件上傳之JQuery ajaxfileupload插件使用(二)

1.JQuery ajaxfileupload插件使用準備 下載地址&#xff1a; http://www.phpletter.com/DOWNLOAD/ 2.原理分析 ajaxfileupload也是利用iframe實現無刷新異步提交&#xff0c;與我的上一篇文章&#xff08;WEB文件上傳之apache common upload使用&#xff08;一&#xff09;&…

Navicat安裝激活

有條件的同學麻煩不要使用下面的激活步驟&#xff0c;僅供個人學習使用 。。。。。。 。。。。。。 。。。。。。 。。。。。。 一、去官網下載最新Navicat軟件https://www.navicat.com.cn/download/navicat-premium 二、去下載激活腳本https://github.com/DoubleLabyrinth/nav…

WEB文件上傳之apache common upload使用(一)

文件上傳一個經常用到的功能&#xff0c;它有許多中實現的方案。 頁面表單 RFC1897規范 http協議上傳 頁面控件(flash/html5/activeX/applet) RFC1897規范 http協議上傳 頁面控件(flash/html5/activeX/applet) 自定義數據規范 http協議上傳 頁面控件(flash/html5/act…

前端CSS學習筆記

一 CSS介紹 層疊樣式表(英文全稱&#xff1a;Cascading Style Sheets)是一種用來表現HTML&#xff08;超文本標記語言&#xff09;或XML&#xff08;標準通用標記語言的一個子集&#xff09;等文件樣式的計算機語言。CSS不僅可以靜態地修飾網頁&#xff0c;還可以配合各種腳本語…

自律以自救

在一次邏輯思維的跨年晚會上&#xff0c;羅胖曾以「帝王」來形容活在當下移動互聯網世界的人們。一個手機 App 可以讓你足不出戶&#xff0c;享受上百名廚師團隊的服務&#xff0c;中飯想吃啥菜式、樣品&#xff0c;輸入框中一應俱全&#xff0c;光論規格&#xff0c;可能已超過…