Thinkphp 实现采集网站数据

例如我要采集这个url里的所有美国电影的信息,

http://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html
image.png
public function index()
        {
            $url ='https://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
            $data = $this->get($url);
            // 匹配电影所在位置
            $list_preg = '/
  • .+<\/li>/Us'; // 匹配img标签上的src和alt $img_preg = '/(.*)/U'; //匹配电影的url $video_preg = '/<\/a>/U'; //把所有的li存到$list里,$list是个二维数组 preg_match_all($list_preg, $data, $list); foreach ($list[0] as $k => $v) { //这里$v就是每一个li标签 //获取图片及电影名称 /*preg_match($img_preg,$v,$img); //把匹配到的图片的信息存到$img里 var_dump($img);*/ //获取电影地址 /* preg_match($video_preg,$v,$video); //把匹配到的电影的信息存到$video里 var_dump($video);*/ preg_match($img_preg, $v, $img); preg_match($video_preg, $v, $video); echo $img[0] . '' . $video[2] . ''; } } public function get($url) { $curl = curl_init(); // 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_ curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 执行这个请求 return curl_exec($curl); }
  • 最终效果


    image.png

    如果需要把图片拷贝到硬盘上,则在foreach循环里加上以下代码:

              $imgData = $this->get($img[1]);
               // 把图片文件写到硬盘上【下载】
                // 因为操作系统是GBK的,所以要把UTF8转成GBK
              is_dir('./youkuimg/') ? '': mkdir('./youkuimg/');
              file_put_contents('./youkuimg/'.mb_convert_encoding($img[3], 'gbk', 'utf-8').'.jpg', $imgData);
    

    完整代码

     public function index()
            {
                // 生成一个curl对象
               // $url = 'http://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
                $url ='https://list.youku.com/category/show/c_96_a_%E7%BE%8E%E5%9B%BD_s_1_d_1_p_3.html';
                $data = $this->get($url);
                // 匹配电影所在位置
                $list_preg = '/
  • .+<\/li>/Us'; // 匹配img标签上的src和alt $img_preg = '/(.*)/U'; //匹配电影的url $video_preg = '/<\/a>/U'; //把所有的li存到$list里,$list是个二维数组 preg_match_all($list_preg, $data, $list); foreach ($list[0] as $k => $v) { //这里$v就是每一个li标签 //获取图片及电影名称 /*preg_match($img_preg,$v,$img); //把匹配到的图片的信息存到$img里 var_dump($img);*/ //获取电影地址 /* preg_match($video_preg,$v,$video); //把匹配到的电影的信息存到$video里 var_dump($video);*/ preg_match($img_preg, $v, $img); preg_match($video_preg, $v, $video); echo $img[0] . '' . $video[2] . ''; $imgData = $this->get($img[1]); // 把图片文件写到硬盘上【下载】 // 因为操作系统是GBK的,所以要把UTF8转成GBK is_dir('./youkuimg/') ? '': mkdir('./youkuimg/'); file_put_contents('./youkuimg/'.mb_convert_encoding($img[3], 'gbk', 'utf-8').'.jpg', $imgData); } } public function get($url) { $curl = curl_init(); // 配置curl中的http协议->可配置的荐可以查PHP手册中的curl_ curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 执行这个请求 return curl_exec($curl); }
  • 效果如下:在当前目录下的youkuimg目录下就会有下载好的图片。


    image.png

    你可能感兴趣的:(Thinkphp 实现采集网站数据)