刷新搜狗微信公众号文章列表列表的步骤暂时不知道

优采云 发布时间: 2021-06-08 02:48

  刷新搜狗微信公众号文章列表列表的步骤暂时不知道

  最近有采集微信公号文章的需求,所以研究了一下。我发现在刷新搜狗微信公众号文章列表的时候,有一个很恶心的地方就是搜狗会直接屏蔽你的ip并输入验证码。这一步暂时不知道怎么破解。我们只是看php采集微信公号文章内容的方法。至于list地址的获取,我们以后再研究。

  在写之前,我搜索了三个用php编写的爬虫:phpQuery、phpspider和QueryList(phpQuery的改进版)。可能不止这些,这就是我发现的。先记录,后研究。

  以下是我写的一个基本的微信公众号php采集类,有待进一步完善。

  /**

 * Created by PhpStorm.

 * User: Administrator

 * Date: 2017/2/6

 * Time: 10:54

 * author: gm

 * 微信公众号文章采集类

 */

class DownWxArticle {

private   $mpwxurl = 'http://mp.weixin.qq.com';

private   $wxgzherr= '公众号二维码下载失败=>';

private   $wximgerr= '图片下载失败=>';

private   $direrr  = '文件夹创建失败!';

private   $fileerr = '资源不存在!';

private   $dirurl  = '';

    /* 抓取微信公众号文章

 * $qcode    boolean 公众号二维码 false=>不下载 true=>下载

 * return

 * $content  string  内容

 * $tile     string  标题

 * $time     int     时间戳

 * $wxggh    string  微信公众号

 * $wxh      string  微信号

 * $qcode    string  公众号二维码

 * $tag      string  标签 原创

 */

    function get_file_article($url,$dir='',$qcode=false)

    {

$this->dirurl = $dir?:'/Uploads/'.date('Ymd',time());

        if(!$this->put_dir($this->dirurl)){

exit(json_encode(array('msg'=>$this->direrr,'code'=>500)));

}

        $file = file_get_contents($url);

        if(!$file){

$this->put_error_log($this->dirurl,$this->fileerr);

            exit(json_encode(array('msg'=>$this->fileerr,'code'=>500)));

        }

        // 内容主体

        preg_match('/[sS]*?/',$file,$content);

        // 标题

        preg_match('/(.*?)/',$file,$title);

        $title = $title?$title[1]:'';

        // 时间

        preg_match('/(.*?)/',$file,$time);

        $time = $time?strtotime($time[1]):'';

        // 公众号

        preg_match(&#39;/(.*?)</a>/&#39;,$file,$wxgzh);

        $wxgzh = $wxgzh?$wxgzh[1]:&#39;&#39;;

        // 微信号

        preg_match(&#39;/([sS]*?)/&#39;,$file,$wxh);

        $wxh   = $wxh?$wxh[1]:&#39;&#39;;

        // 公众号二维码

        if($qcode){

            preg_match(&#39;/window.sg_qr_code="(.*?)";/&#39;,$file,$qcode);

            $qcodeurl = str_replace(&#39;x26amp;&#39;,&#39;&&#39;,$this->mpwxurl.$qcode[1]);

            $qcode = $this->put_file_img($this->dirurl,$qcodeurl);

            if(!$qcode){

                $this->put_error_log($this->dirurl,$this->wxgzherr.$qcodeurl);

            }

        }

        // 获取标签

        preg_match(&#39;/(.*?)/&#39;,$file,$tag);

        $tag = $tag?$tag[1]:&#39;&#39;;

        // 图片

        preg_match_all(&#39;//&#39;,$content[0],$images);

        // 储存原地址和下载后地址

        $old = array();

        $new = array();

        // 去除重复图片地址

        $images = array_unique($images[1]);

        if($images){

            foreach($images as $v){

                $filename = $this->put_file_img($this->dirurl,$v);

                if($filename){

                    // 图片保存成功 替换地址

                    $old[] = $v;

                    $new[] = $filename;

                }else{

                    // 失败记录日志

                    $this->put_error_log($this->dirurl,$this->wximgerr.$v);

                }

            }

            $old[] = &#39;data-src&#39;;

            $new[] = &#39;src&#39;;

            $content = str_replace($old,$new,$content[0]);

        }

       // 替换音频

       $content = str_replace("preview.html","player.html",$content); 

       // 获取阅读点赞评论等信息

       $comment = $this->get_comment_article($url);

$data = array(&#39;content&#39;=>$content,&#39;title&#39;=>$title,&#39;time&#39;=>$time,&#39;wxgzh&#39;=>$wxgzh,&#39;wxh&#39;=>$wxh,&#39;qcode&#39;=>$qcode?:&#39;&#39;,&#39;tag&#39;=>$tag?:&#39;&#39;,&#39;comment&#39;=>$comment);

        return json_encode(array(&#39;data&#39;=>$data,&#39;code&#39;=>200,&#39;msg&#39;=>&#39;ok&#39;));

    }

    /* 抓取保存图片函数

     * return

     * $filename  string  图片地址

     */

    function put_file_img($dir=&#39;&#39;,$image=&#39;&#39;)

    {

        // 判断图片的保存类型 截取后四位地址

        $exts = array(&#39;jpeg&#39;,&#39;png&#39;,&#39;jpg&#39;);

        $filename = $dir.&#39;/&#39;.uniqid().time().rand(10000,99999);

        $ext = substr($image,-5);

        $ext = explode(&#39;=&#39;,$ext);

        if(in_array($ext[1],$exts) !== false){

            $filename .= &#39;.&#39;.$ext[1];

        }else{

            $filename .= &#39;.gif&#39;;

        }

        $souce = file_get_contents($image);

        if(file_put_contents($filename,$souce)){

            return $filename;

        }else{

            return false;

        }

    }

    /* 获取微信公众号文章的【点赞】【阅读】【评论】

     * 方法:将地址中的部分参数替换即可。

     *     1、s?     替换为 mp/getcomment?

     *     2、最后=  替换为 %3D

     * return

     * read_num  阅读数

     * like_num  点赞数

     * comment   评论详情

     */

    function get_comment_article($url=&#39;&#39;)

    {

        $url = substr($url,0,-1);

        $url = str_replace(&#39;/s&#39;,&#39;/mp/getcomment&#39;,$url).&#39;%3D&#39;;

        return file_get_contents($url);

    }

    /* 错误日志记录

     * $dir  string  文件路径

     * $data string  写入内容

     */

    function put_error_log($dir,$data)

    {

        file_put_contents($dir.&#39;/error.log&#39;,date(&#39;Y-m-d H:i:s&#39;,time()).$data.PHP_EOL,FILE_APPEND);

    }

    /* 创建文件夹

     * $dir string 文件夹路径

     */

    function put_dir($dir=&#39;&#39;){

$bool = true;

        if(!is_dir($dir)){

            if(!mkdir($dir,777,TRUE)){

$bool = false;

                $this->put_error_log($dir,$this->direrr.$dir);

            }

        }

return $bool;

    }

}

  使用方法:

  $url = &#39;&#39;;

$article = new DownWxArticle();

$article->get_file_article($url,&#39;&#39;,true);

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线