QueryList+thinkphp5.1+php實現資訊採集
阿新 • • 發佈:2019-01-03
QueryList安裝
通過作曲安裝:
composer require jaeger/querylist
<?php use QL\QueryList; public function current_images(){ //$url = $this->request->param('url'); $url = "https://item.jd.com/20902734214.html"; $data = QueryList::get($url) // 設定採集規則 ->rules([ 'goods_name'=>array('li img','alt'), 'link_url'=>array('li img','src') ]) ->query()->getData(); //列印結果 $img_out = $data->all(); $photo_num = count($img_out); //匹配到的圖片數量 echo $url . "共找到 " . $photo_num . " 張圖片<br>"; foreach ($img_out as $k => $v){ //$img_out[$k]['img'] = "<img src='".$v['link_url']."' />"; $this->save_one_img($url,$v['link_url']); } } /** * 儲存單個圖片的方法 * @param String $capture_url 用於抓取圖片的網頁地址 * @param String $img_url 需要儲存的圖片的url */ public function save_one_img($capture_url,$img_url){ $img_size = 0; //圖片路徑地址 if ( strpos($img_url, 'http://')!==false ){ // $img_url = $img_url; }else{ $domain_url = substr($capture_url, 0,strpos($capture_url, ':',5)+1); $img_url=$domain_url.$img_url; } $pathinfo = pathinfo($img_url); //獲取圖片路徑資訊 $pic_name=md5($pathinfo['filename']).'.'.$pathinfo['extension'];//(自定義名稱) $app_path = dirname($_SERVER['SCRIPT_FILENAME']) . "/"; $root_path = dirname(realpath($app_path)) . "/"; $path = $root_path . 'public/download/'.date("Y-m-d").'/'; if (!is_dir(dirname($path))) { mkdir(dirname($path), 0755); } if (!is_dir($path)) { mkdir($path, 0755); } $path = $path.$pic_name; if (file_exists($path)){ //如果圖片存在,證明已經被抓取過,退出函式 echo $img_url.'該圖片已經抓取過!'."<br>"; return; } //將圖片內容讀入一個字串 $img_data = file_get_contents($img_url); //遮蔽掉因為圖片地址無法讀取導致的warning錯誤 if ( strlen($img_data) > $img_size ){ //下載size比限制大的圖片 $img_size = file_put_contents($path, $img_data); if ($img_size){ echo $img_url.'圖片儲存成功!'."<br>"; } else { echo $img_url.'圖片儲存失敗!'."<br>"; } } else { echo $img_url.'圖片讀取失敗!'."<br>"; } }