1. 程式人生 > >QueryList+thinkphp5.1+php實現資訊採集

QueryList+thinkphp5.1+php實現資訊採集

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>";
        }
    }