PHP小红书文章爬虫

这里的小红书爬虫和上篇的微信公众号文章爬虫差不多,可以互相借鉴一下,但内容源地址的传输的时候注意下,小红书为文章地址第一次进入的时候不是真正的地址,可以将地址复制到别的浏览器解析一下,内容源地址会在“?_at=”后面跟上参数,这才是真正的地址

/**
      * 爬虫逻辑
      * 获取html内容
      */
     public function crawler($centent_url)
     {
         //接收内容源地址
         $request = $centent_url;
         $html = $this->getUrlContent($request);

         $relwvantart = array();
         //获取文章主要内容
         preg_match_all("/class=\"content\" data-v-331b5d4b>(.*)<div/iUs",$html,$content,PREG_PATTERN_ORDER);
         $content = "<div class='content' data-v-331b5d4b>".$content[1][0];
         //文章中的emojis表情处理
//         $tmpstr = $this->userTextEncode($content);
//         $content = $this->userTextDecode($tmpstr);
//         print_r($content);
        //这里的文章内容中会有作者加入的emojis表情,所以要重新编码一下,再查询的时候要用htmlspecialchars_decode()和base64_decode()处理一下
         $relwvantart['content'] = base64_encode($content);

         //获取文章标题
         preg_match_all("/<h3 class=\"title\" data-v-64a04a28>(.*)<\/h3>/iUs",$html,$title,PREG_PATTERN_ORDER);
         $title = $title[1][0];
         $relwvantart['title'] = $title;
         if (empty($title)){
             //获取meta里的description当标题
             preg_match_all("/<meta name=\"description\" content=\"(.*)\">/iUs",$html,$desc,PREG_PATTERN_ORDER);
             $desc = $desc[1][0];
             $relwvantart['title'] = $desc;
         }

         //获取缩略图板块内容
         preg_match_all("/<span class=\"inner\" style=\"background-image:url((.*));\" data-v-a16c5c68>/iUs",$html,$temp,PREG_PATTERN_ORDER);
         $tempicon = $temp[1];
         $img_url = array();
         //图片路径处理
         foreach ($tempicon as $k => $v){
             $img_url[$k] = str_replace('(','https:',$v);
         }
         foreach($img_url as $key => $value){
             $img_url[$key] = str_replace(')','',$value);
         }
         //将图片保存在本地并上传oss
         foreach ($img_url as $i => $j){
             $res = $this->crabImage($j);
             $imgurl[$i] = $res['save_path'];
         }
//         print_r($res);
         $relwvantart['img'] = $imgurl;
         return $relwvantart;
     }

     /**
      * 爬虫程序
      * 从给定的url获取html内容
      * @param string $url
      * @return string
      */
     function getUrlContent($request) {
         $handle = fopen($request, "r");
         if ($handle) {
             $content = stream_get_contents($handle, -1);
             //读取资源流到一个字符串,第二个参数需要读取的最大的字节数。默认是-1(读取全部的缓冲数据)
             // $content = file_get_contents($url, 1024 * 1024);
             return $content;
         } else {
             return false;
         }
     }

猜你喜欢

转载自blog.csdn.net/weixin_42593599/article/details/82290652