技术文摘

使用PHP巧妙提取微信公众号文章内容标题等信息精髓

作者:雨祺   发表于:
浏览:231次    字数:2985  原创
级别: 站长   总稿: 69 篇,  月稿: 0
微信公众号是现代社会中非常受欢迎的一种信息获取方式,但有时候我们需要将公众号文章的内容抓取下来进行分析或者保存,这时候就需要用到php来实现。本文将从如何获取微信公众号文章链接入手,逐步讲解如何使用php来抓取微信公众号文章中的内容。

在php后加上 ?url= 公众号文章链接 。比如本站的接口地址
  1. https://www.meiweny.cn/ecmsapi/index.php?mod=jiexi&act=weixincaiji&url=https://mp.weixin.qq.com/s/BSD0Bj5ySzTxe97VMACDig 
输出仍然是JSON格式,这是当前最流行!没有办法!(毕竟web网站,小程序,APP都能接收JSON格式的数据)

返回参数:简介以本站的API接口为例!输出如下:
  1. status:状态码 
  2. url:微信公众号文章连接地址 
  3. newstext:微信公众号文章内容 
  4. title:微信公众号文章标题
  5. titlepiccl:微信公众号文章封面图片
  6.  smalltext:微信公众号文章简介
  7. nickname:微信公众号名字
  8. head_img:微信公众号头像 
一、获取微信公众号文章链接(地球人都知道的)

在抓取微信公众号文章之前,我们需要先获取到该公众号文章的链接。可以通过以下几种方式来获取:

1.在微信公众平台后台复制链接:登录微信公众平台后台,找到要抓取的文章,点击右上角的“复制链接”按钮即可复制该篇文章的链接。

2.使用第三方工具获取链接:目前市面上有很多第三方工具可以帮助我们获取微信公众号文章链接,例如“搜狗微信搜索”,输入关键词搜索后即可获得相关文章列表及其链接。

二、使用php抓取微信公众号文章并用正则式获取微信公众号文章的相关信息。这里就不啰嗦了,直接上代码: 此代码只是适配了有用第三方编辑器的“同步阅读”,“香落尘外”,“神州文艺”等微信公众号!其他有用第三方编辑器的微信公众号请在正则里面继续添加规则!此代码良好适配默认的微信公众号发布平台!
  1. <?php 
  2. header('Access-Control-Allow-Origin: *'); 
  3. header('Content-Type: text/html; charset=UTF-8'); 
  4. defined('ECMSAPI_MOD') or exit; 
  5. $url = @$_GET['url']?$_GET['url']:"https://mp.weixin.qq.com/s/n-X7v_JBFTSM6kBYyIG5kg"
  6. $headers = array( 
  7. 'Host' => 'mmbiz.qpic.cn'
  8. 'Connection' => 'keep-alive'
  9. 'Pragma' => 'no-cache'
  10. 'Refererr'=>'http://www.qq.com/'
  11. 'Cache-Control' => 'no-cache'
  12. 'Accept' => 'textml,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8'
  13. 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36'
  14. 'Accept-Encoding' => 'gzip, deflate, sdch'
  15. 'Accept-Language' => 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4' 
  16. ); 
  17. $ch = curl_init(); 
  18. curl_setopt($ch, CURLOPT_URL,$url); 
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
  20. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
  21. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
  22. curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); 
  23. $result= curl_exec($ch); 
  24. curl_close($ch); 
  25. preg_match_all('/meta name="author" content="(.*?)"/', $result, $m);   
  26. $nickname = $m[1][0];//公众号昵称 
  27. preg_match_all('/property="og:title" content="(.*?)"/', $result, $m);   
  28. $title = $m[1][0];//公众号文章标题 
  29. preg_match_all('/property="og:image" content="(.*?)"/', $result, $m);   
  30. $titlepic = $m[1][0];//公众号文章标题图片 
  31. preg_match_all('/name="description" content="(.*?)"/', $result, $m);   
  32. $smalltext = $m[1][0];//公众号文章简介 
  33. preg_match_all('/var round_head_img = "(.*?)";/si',$result,$m); 
  34. $head_img = $m[1][0];//公众号头像  
  35. if (!extension_loaded('dom')) {   
  36. die('DOMDocument扩展未加载,请检查PHP配置文件。');   
  37. }   
  38. $dom = new DOMDocument();   
  39. try {   
  40. $dom->loadHTML($result);   
  41. catch (Exception $e) {   
  42. die('加载HTML时出错:' . $e->getMessage());   
  43. foreach ($dom->getElementsByTagName('*') as $tag) {   
  44. if ($tag->hasAttribute('style')) {   
  45. $tag->removeAttribute('style');   
  46. }   
  47. }   
  48. $newstext = ''
  49. $divtext = $dom->getElementById('js_content');  
  50. // 遍历所有的子节点   
  51. foreach ($divtext->childNodes as $child) {   
  52. $newstext .=$child->ownerDocument->saveHTML($child); 
  53. // 删除所有非p、br和img标签   
  54. $newstext=strip_tags($newstext, "<img><br><p>");   
  55. $newnewstext = preg_replace_callback('/<img[^>]+>/'function ($matches) {   
  56. global $empire,$public_r,$dbtbpre, $title, $smalltext;     
  57. $img = $matches[0];   
  58. $attrs = [];   
  59. preg_match('/data-src="([^"]+)"/', $img, $matches);   
  60. if (isset($matches[1])) {   
  61. $imgData = file_get_contents($matches[1]);       
  62. if ($imgData !== false) {   
  63. //$attrs['src'] = 'data:image/png;base64,' . base64_encode($imgData);   
  64. $attrs['src'] = $matches[1];  
  65. else {   
  66. $attrs['src'] = $matches[1];  
  67. }   
  68. return '<img src=" '.implode(' ', $attrs).' " title="'.$title.'">';   
  69. },$newstext);   
  70. $replacement = '<$1$2';   
  71. $newHtml = preg_replace('/<(/)?(p|span|br)[^>]*style="[^"]*"/i', $replacement, $newnewstext);   
  72. $newHtml = preg_replace('/<p[^>]*styles*=s*"s*[^"]*"s*>(.*?)</p>/i''$2', $newHtml);  
  73. $newHtml= str_replace(array("<p><br></p>""<p><br></p>"), '', $newHtml);  
  74. $wechattext =preg_replace('/</strong>|■|<strong>|.*免费订阅|.*文学新高地|.*点击上方/i''',  $newHtml);  //去头部 
  75. $wechattext = preg_replace('~作者简介.*?>|延伸阅读.*|重要公告.*|责任编辑.*|落尘外平台团队.*|作者:.*|</p>香落尘外.*|往期作品回顾.*~''',$wechattext); //去尾部 
  76. $content = [ 
  77. 'status' => 200, 
  78. 'msg' => "采集成功"
  79. 'newstext' => $wechattext, 
  80. 'nickname' => $nickname, 
  81. 'title' => $title, 
  82. 'url' => $url, 
  83. 'titlepic' => $titlepic, 
  84. 'smalltext' => $smalltext, 
  85. 'head_img' => $head_img, 
  86. 'time' => date("Y-m-d H:i:s"), 
  87. 'api_source' => "".$public_r['sitename']."官网地址:".$public_r['add_pcurl']."" 
  88. ]; 
  89. $Json=json_encode($content,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE); 
  90. echo stripslashes($Json); 
以上就是用代码抓取获取微信公众号文章的相关信息!此举是为了指定目标采集或者搬迁到第三方有可用接口的平台!鉴于小编只是测试并没有深究这个正则式!某些微信公众号利用其他三方发布到微信公账号的文章或许采集或带来不愉快的体验!请在相关注释的地方进行正则匹配!还是那句老话自己动身丰衣足食!本教程都是免费的,只是给不会的小伙伴提供一个范例!如果有好的写法也可以跟我们联系哦!

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags: PHP 文章 微信公众号 公众号 微信 精髓

发布者资料

热门文章

技术文摘

查看更多技术文摘
首页
栏目
搜索
会员
投稿