整理了一下前段时间写的php微信公众号文章的爬虫,解决了微信的防=防盗链机制,这里对图片进行了统一管理。代码使用tp3框架写的,可以根据实情换成tp5或者laravel框架的代码。

爬虫的参数可自行修改,我这里是项目需要,传的验证参数

/**
     * 进入url手动采集文章逻辑
     *
     */

public function manual($centent_url,$cateidstring,$status)

{
        $request = trim($centent_url);

//地址验证(不完整的验证,后补)
        if (empty($request)){

$resdata["r"]=3;
            return $resdata;
            exit;
        }
        //抓取文章内容

$html = $this->getUrlContent($request);
        $result = array();
        //抓取文章主要内容
        preg_match_all("/id=\"js_content\">(.*)<script/iUs",$html,$content,PREG_PATTERN_ORDER);
        //dump($html);exit;

$content = "<div id='js_content'>".$content[1][0];

//$content变量的值是前面获取到的文章内容html
        $content = str_replace("data-src","src",$content);
        //$content变量的值是前面获取到的文章内容html
        $content= str_replace("preview.html","player.html",$content);
        //将视频地址中的&amp全部替换成&
//        $content = str_replace("&amp","&",$content);
        //$html变量的值是前面获取到的文章全部html
        preg_match_all('/var msg_title = \"(.*?)\";/si',$html,$m);
        $msg_title = $m[1][0];//文章标题

$res = $this->robotartmodel->where(array("title"=>$msg_title))->find();

if ($res){
            $resdata["r"]=2;
            return $resdata;
            exit;
        }

preg_match_all('/var msg_desc = \"(.*?)\";/si',$html,$m);
        $msg_desc = $m[1][0];//文章标题
        /*preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
        $head_img = $m[1][0];//公众号头像*/
        preg_match_all('/var publish_time = \"(.*?)\";/si',$html,$m);
        $temp = $m[1][0];//零时日期存储
        preg_match('/([0-9]{4})-([0-9]{2})-([0-9]{2})/', $temp,$n);
        $publish_time = $n[0];//获取发布时间
        preg_match_all('/var msg_cdn_url = \"(.*?)\";/si',$html,$m);
        $msg_cdn_url = $m[1][0];//首张图片
        preg_match('/var nickname = \"(.*?)\";/si',$html,$m);
        $category = $m[1];//公众号
//        preg_match_all('/^https://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/',$html,$m);

//        $video_url = $m[1][0];//视频地址

//视频地址

//https://v.qq.com/x/page/*****.html 获取到的vid参数,将星号替换

preg_match_all('/src=\"(.*?)\"/si',$content,$m);//获取src集合

$imgUrl = $m[1];

$imagearr = $this->crabImage($msg_cdn_url);

//处理图片

//将图片下载到本地文件夹中

$savepath = array();

foreach ($imgUrl as $key => $value){

//这里的crabImage图片下载本地函数可以再前面的几篇文章中找一下

$res = $this->crabImage($value);

//保存后的地址存入$savepath中

$savepath[$key] = $res['save_path'];

}

//将$content中的图片地址全部替换成$save_path

foreach ($savepath as $k => $val){

$content = str_replace($imgUrl[$k],$val,$content);

}

$map['nickname']=$category;

//根据微信号名称判断事都已经保存在数据库中

$pubwechatinfo=$this->robotpubwechatmodel->where($map)->find();

if($pubwechatinfo){

$pubwcid = $pubwechatinfo['id'];

}else{

$map['status']=1;

$pubwcid=$this->robotpubwechatmodel->add($map);

}

$result['pubwcid']=$pubwcid;

//将替换过的内容部分再替换出原$html里的内容

$result['content']      = $content;

$result['title']        = $msg_title;

$result['description']  = $msg_desc;

$result['publish_time'] = $publish_time;

$result['create_time']  = date('Y-m-d H:i:s');

$result['image']        = $imagearr['save_path'];

$result['search_url']   = $request;

$result['status']       = $status;
        $result["cateid"]      = $cateidstring;
        //文章的保存和处理

$data =$this->robotartmodel->add($result);

//将存储的文章信息写入分类表

/* $val = $article_category->insert(['category'=>$result['category']]);*/
        //dump($pubwcid.'<br>'.$data);exit;

if($pubwcid && $data){

$resdata["r"]=1;
           $resdata["artid"]=$data;
       }else{
           $resdata["r"]=0;
       }
       return $resdata;
    }
    
    /**
     * 爬虫程序
     * 从给定的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);
            
            //这里也可以用php的curl爬取网页内容,可将curl爬取方式封装在这里

return $content;
        } else {
            return false;
        }
    }

PHP微信公众号文章爬虫相关推荐

  1. 微信公众平台接口调试工具json格式不对怎么搞_一步步教你打造微信公众号文章爬虫(3)-批量下载...

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  2. python 公众号爬虫_微信公众号文章爬虫

    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章.抓取公众号的所有的文章,需要获取两个比较重要的参数.一个是微信公众号的唯一I ...

  3. python下载微信公众号文章_一步步教你打造微信公众号文章爬虫(3)-批量下载

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功 ...

  4. python爬取公众号阅读量_分享一个牛逼的Python项目:公众号文章爬虫

    我订阅了近 100 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众 ...

  5. python 公众号文章发布_分享一个牛逼的Python项目:公众号文章爬虫

    我订阅了近 100 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众 ...

  6. python write非法字符报错_Python爬虫实现的微信公众号文章下载器

    平时爱逛知乎,收藏了不少别人推荐的数据分析.机器学习相关的微信公众号(这里就不列举了,以免硬广嫌疑).但是在手机微信上一页页的翻阅历史文章浏览,很不方便,电脑端微信也不方便. 所以我就想有什么方法能否 ...

  7. Python3网络爬虫开发实战,使用IP代理爬取微信公众号文章

    前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  8. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  9. Python2.7爬虫——爬取微信公众号文章

    今天跟着这篇博客抓取微信公众号文章练习了一下爬虫,运行成功.想和大家分享一下过程中出现的问题和解决方法. 运行环境 windows 7 + Pycharm2018 + Python 2.7 目录 目录 ...

最新文章

  1. NLP技术落地为何这么难?里面有哪些坑?
  2. 一名毕业三年的女程序媛面试头条经验,重难点整理
  3. tp5 控制器不存在_使用服务器管理器将域控制器降级
  4. [YTU]_2632 ( B2 友元光顾)
  5. 虚拟机拷贝出来_NETAPP存储虚拟机数据恢复案例
  6. 我的世界java版移除猪灵了吗_我的世界:激怒僵尸猪灵有奖励,用菌光体堆肥,修复126个漏洞!...
  7. 使用ajax+php+mysql实现数据库定时刷新
  8. Linux网络编程 之 无连接和有连接通信(二)
  9. 周期长度和(KMP)
  10. android应用开发(25)---进程和应用程序生命周期
  11. MIT脑洞研究!只听6秒语音,就知道你长什么样,效果好得不敢信
  12. java 里面怎么截取倒数第几个字_Java反射是什么
  13. 单元格赋值与联动 例:C1值赋予D1 ,并将D1的值传给图表元素联动
  14. 微信小程序开发——上传图片
  15. 机器视觉可以应用到哪些领域,你都知道吗?
  16. 【Proteus仿真】NE555延时电路
  17. SM2258XT错误代码及中文翻译
  18. 2022年CCNA面试题库和答案
  19. 汽车CAN总线技术详解
  20. 服务器网卡支持热插拔吗,HDMI接口能“热插拔”吗?这篇告诉你

热门文章

  1. 常用快捷键大全Win7快捷键
  2. 计算机科学中atm是什么,计算机专业知识:ATM网络基本原理
  3. 亚马逊违反受限商品申诉模板,亚马逊二手产品申诉
  4. Spring Boot中多个PostConstruct注解执行顺序控制
  5. MySQL数据库 -- 库和表的操作
  6. MySQL (四)------DML操作表记录-增删改【重点】DQL操作表记录-查询【重点】
  7. # 技术栈知识点巩固——Js
  8. MySQL5.5 的安装与配置
  9. YARN - Task, Node manager, AppMaster, Resource manager 失败时所做的处理
  10. excel项目计划_使用Excel计划您的聚会座位