首頁 > php框架 > ThinkPHP > Thinkphp5與QueryList實作擷取頁面功能(爬蟲)

Thinkphp5與QueryList實作擷取頁面功能(爬蟲)

藏色散人
發布: 2020-01-28 13:57:27
轉載
4028 人瀏覽過

Thinkphp5與QueryList實作擷取頁面功能(爬蟲)

QueryList 是什麼?

#QueryList是一套用於內容收集的PHP工具,它使用更現代化的開發思想,語法簡潔、優雅,可擴展性強。相較於傳統的使用晦澀的正規表示式來做採集,QueryList使用了更強大而優雅的CSS選擇器來做採集,大大降低了PHP做採集的門檻,同時也讓採集程式碼易讀易維護,讓你從此告別晦澀難懂且不易維護的正規表示式。

 

QueryList 提供的一整套內容採集解決方案

● DOM內容選擇:CSS選擇器

● HTTP客戶端:GuzzleHTTP

● 內容過濾:CSS選擇器

● 解決亂碼:內建多套亂碼解決方案

● 額外功能:豐富的擴充插件

 

前提

專案主要使用thinkphp5框架,主要用在`QueryList.php`和`phpQuery.php`這兩個檔案。我們可以切換到專案目錄,extend里新建QL,然後在QL目錄執行composer指令安裝QueryList:

1

composer require jaeger/querylist

登入後複製

然後在需要使用的控制器中加入use QL\QueryList; 接下來就在控制器裡編寫程式碼了,以下是一個實例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//需要采集的目标页面

$page = 'http://cms.querylist.cc/news/566.html';

//采集规则

$reg = array(

   //采集文章标题

   'title' => array('h1','text'),

   //采集文章发布日期,这里用到了QueryList的过滤功能,过滤掉span标签和a标签

   'date' => array('.pt_info','text','-span -a',function($content){

       //用回调函数进一步过滤出日期

       $arr = explode(' ',$content);

       return $arr[0];

   }),

   //采集文章正文内容,利用过滤功能去掉文章中的超链接,但保留超链接的文字,并去掉版权、JS代码等无用信息

   'content' => array('.post_content','html','a -.content_copyright -script',function($content){

       //利用回调函数下载文章中的图片并替换图片路径为本地路径

       //使用本例请确保当前目录下有image文件夹,并有写入权限

       //由于QueryList是基于phpQuery的,所以可以随时随地使用phpQuery,当然在这里也可以使用正则或者其它方式达到同样的目的

 

       $doc=\phpQuery::newDocumentHTML($content);

       $imgs = pq($doc)->find('img');

       foreach ($imgs as $img) {

           $src = 'http://cms.querylist.cc'.pq($img)->attr('src');

           $localSrc = md5($src).'.jpg';

           $stream = file_get_contents($src);

           file_put_contents($localSrc,$stream);

           pq($img)->attr('src',$localSrc);

       }

       return $doc->htmlOuter();

   })

);

$rang = '.content';

$ql = QueryList::Query($page,$reg,$rang);

$data = $ql->getData();

//打印结果

print_r($data);

登入後複製

 

 

#注意:

使用phpQuery類別時需要在前面加上\,因為phpQuery.php中沒有使用命名空間,因為使用命名空間後,QueryList.php無法使用phpQuery類別。

更多相關ThinkPHP知識,請造訪ThinkPHP教學

以上是Thinkphp5與QueryList實作擷取頁面功能(爬蟲)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板