QueryList是一個基於phpQuery的PHP通用列表采集類,得益於phpQuery,讓使用QueryList幾乎沒有任何學習成本,只要會CSS3選擇器就可以輕松使用QueryList了,它讓PHP做采集像jQuery選擇元素一樣簡單。
官方地址:https://querylist.cc/
ezSQL PHP 是用php開發的一套輕量級的數據庫類,這個數據庫類占用服務器資源小,代碼簡潔,同時支持多種數據庫的使用,安全性高。
下載地址:sjolzy.cn/php/ezSQL/bak/ez_sql_2.05.zip
搭建一個簡單的框架目錄結構:
db里放得是ezsql類相關文件
lib里放得是querylist相關文件
index.php 為主程序
以采集貓眼電影TOP100為例代碼如下:
index.php
<?php require 'lib/phpQuery.php'; require 'lib/QueryList.php'; require "db/shared/ez_sql_core.php"; require "db/mysql/ez_sql_mysql.php"; use QL\QueryList; //抓取貓眼電影TOP100榜單內容 $db = new ezSQL_mysql('root', 'root', 'spider', 'localhost'); $offset=0; for($i=0;$i<10;$i++){ $gurl="http://maoyan.com/board/4?offset=".$offset; // echo $gurl.PHP_EOL; $rules = array( //采集id為one這個元素里面的純文本內容 'url' => array('.movie-item-info .name a','href','',function($content){ return 'http://maoyan.com'.$content; }),//鏈接 ); $data = QueryList::Query($gurl,$rules)->data; // print_r($data); foreach ($data as $key => $val) { getContents($db,$val['url']); } $offset+=10; echo "弟".($i+1)."頁完成".PHP_EOL; } //取電影內容 傳入內容頁的鏈接地址 function getContents($db,$url){ $rules = array( //采集id為one這個元素里面的純文本內容 'name' => array('.movie-brief-container .name','text'),//電影名 'ename' => array('.movie-brief-container .ename','text','',function($content){ return str_replace("'","\'",$content); }),//英文名 'type' => array('.movie-brief-container ul li:eq(0)','text'),//電影類型 'area' => array('.movie-brief-container ul li:eq(1)','text','',function($content){ return trim(explode("/", $content)[0]); }),//產地 'timelen' => array('.movie-brief-container ul li:eq(1)','text','',function($content){ return trim(explode("/", $content)[1]); }),//片長 'addtime' => array('.movie-brief-container ul li:eq(2)','text','',function($content){ return substr($content,0,10); }),//上映時間 'addarea' => array('.movie-brief-container ul li:eq(2)','text','',function($content){ return substr($content,10); }),//上映地點 ); $data = QueryList::Query($url,$rules)->data; print_r($data); $name=$data[0]["name"]; $ename=$data[0]["ename"]; $area=$data[0]["area"]; $type=$data[0]["type"]; $timelen=$data[0]["timelen"]; $addtime=$data[0]["addtime"]; $addarea=$data[0]["addarea"]; $db->query("INSERT INTO maoyan (name, ename,type,area,timelen,addtime,addarea) VALUES ('$name','$ename','$area','$type','$timelen','$addtime','$addarea')"); }
采集的結果:
項目下載:https://files.cnblogs.com/files/wordblog/spider.rar