亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP寫(xiě)微信公眾號(hào)文章頁(yè)采集方法

 更新時(shí)間:2017年12月04日 10:54:51   投稿:laozhang  
給大家分析一下如何用PHP寫(xiě)出采集微信公眾號(hào)文章的方法以及代碼詳細(xì)講解,需要的朋友學(xué)習(xí)一下。

通過(guò)搜狗搜索采集公眾號(hào)歷史消息有幾個(gè)問(wèn)題:

1、有驗(yàn)證碼;

2、歷史消息列表只有最近10條群發(fā)內(nèi)容;

3、文章地址是有有效期的;

4、據(jù)說(shuō)批量采集還要換ip;

通過(guò)我前面文章的方法就沒(méi)有這些問(wèn)題,雖然采集系統(tǒng)搭建不如傳統(tǒng)采集器寫(xiě)個(gè)規(guī)則去爬就可以了那么簡(jiǎn)單。但是一次搭建好之后批量采集的效率還是可以的。而且采集的文章地址是永久有效的,并且可以采集到一個(gè)公眾號(hào)所有的歷史消息。
我們還是從一個(gè)公眾號(hào)文章的鏈接地址開(kāi)始看:

1、從微信右上角菜單復(fù)制到的鏈接地址:

http://mp.weixin.qq.com/s/fF34bERZ0je_8RWEJjoZ5A

2、歷史消息列表中獲取到的地址:

http://mp.weixin.qq.com/s?__biz=MjM5NDAwMTA2MA==&mid=2695729619&idx=1&sn=8be0b6bd0210cee0d492ebdf20f7371f&chksm=83d74818b4a0c10ef286b33bb7deb73226125f866ddb5b2781166066a69afef3705eabdb3b85&scene=4#wechat_redirect

3、完整的真實(shí)地址:

https://mp.weixin.qq.com/s?__biz=MjM5NDAwMTA2MA==&mid=2695729619&idx=1&sn=8be0b6bd0210cee0d492ebdf20f7371f&chksm=83d74818b4a0c10ef286b33bb7deb73226125f866ddb5b2781166066a69afef3705eabdb3b85&scene=37&key=c81d77271180a0e6ce32be2d9dcaa2a7436aeba2c1d47a20d02194d1c944a8286a8eded93495eeadd05da412bbfaa638a379750aeaa4cf5c00e4d7851c5710d9b9736b80e3c72770a57a515c23ff2400&ascene=3&uin=MzUyOTIyNQ%3D%3D&devicetype=iOS10.1.1&version=16050120&nettype=WIFI&fontScale=100&pass_ticket=FGRyGfXLPEa4AeOsIZu7KFJo6CiXOZex83Y5YBRglW4%3D&wx_header=1

以上這3個(gè)地址是同一篇文章的地址,在不同位置獲取到就得到了完全不同的3個(gè)結(jié)果。

和歷史消息頁(yè)一樣,微信有一套自動(dòng)補(bǔ)充參數(shù)的機(jī)制。第一個(gè)地址是復(fù)制鏈接得到的,看起來(lái)是一個(gè)偽裝的編碼。其實(shí)沒(méi)什么用我們不做考慮了。第二個(gè)地址是通過(guò)前面文章介紹的方法,從歷史消息的json文章列表中獲得到的鏈接地址,我們就是可以將這個(gè)地址保存到數(shù)據(jù)庫(kù)中。之后就可以通過(guò)這個(gè)地址從服務(wù)器獲取到文章內(nèi)容。而第三個(gè)鏈接補(bǔ)充了參數(shù)之后,目的是為了讓文章頁(yè)面中的閱讀量js可以獲取到閱讀量點(diǎn)贊量的json結(jié)果而加上的參數(shù)。我們前面文章的方法中因?yàn)槲恼马?yè)面被客戶端打開(kāi)顯示了出來(lái),因?yàn)橛辛诉@些參數(shù),文章頁(yè)面中的js就去自動(dòng)獲取閱讀量了,所以我們才能通過(guò)代理服務(wù)獲取到這篇文章的閱讀量。

這篇文章的內(nèi)容就是以通過(guò)本專(zhuān)欄前面文章介紹的方法已經(jīng)獲取到了大量微信文章的基礎(chǔ)上,詳細(xì)研究如何獲取到文章內(nèi)容和其它一些有用的信息的方法。

(我的數(shù)據(jù)庫(kù)中保存的文章列表,一部分字段)

1、獲取文章源代碼:

通過(guò)php的函數(shù)file_get_content()就可以將文章源代碼讀取到變量中。微信文章的源代碼因?yàn)榭梢詮臑g覽器中打開(kāi)所以我就不在這里粘貼了,以免浪費(fèi)頁(yè)面空間。

<?
//$content_url 變量的值為文章地址
$html = file_get_contents($content_url);
?>

2、源代碼中有用的信息:

1)原文內(nèi)容:

原文內(nèi)容是包含在一個(gè)<div id='js_content'></div>標(biāo)簽中的,通過(guò)php代碼獲?。?/p>

<?
preg_match_all("/id=\"js_content\">(.*)<script/iUs",$html,$content,PREG_PATTERN_ORDER);
$content = "<div id='js_content'>".$content[1][0];
?>

正則的開(kāi)頭識(shí)別<div id='js_content'>,結(jié)尾識(shí)別<script/iUs,匹配到之后前面再補(bǔ)充一個(gè)<div id='js_content'>;我的正則匹配水平有限,只能寫(xiě)成這樣的了。希望有高人能指點(diǎn)更好的正則匹配方法。

另外注意:這個(gè)匹配規(guī)則會(huì)可能在一段時(shí)間之后有變化。這篇文章會(huì)盡量保持更新。如果你根據(jù)我的文章制作了采集系統(tǒng)之后,當(dāng)某一天失效了,別忘了回來(lái)再看看文章是否有更新。

2)內(nèi)容處理:

通過(guò)上面的方法我們獲得了文章內(nèi)容的html,但是你將文章內(nèi)容顯示出來(lái)之后就會(huì)發(fā)現(xiàn),圖片和視頻不能正常顯示。因?yàn)檫@個(gè)html還需要一些加工:

首先是圖片,微信文章中的<img>標(biāo)簽中的src屬性全部都用了data-src屬性代替。只有在顯示的時(shí)候才會(huì)被替換過(guò)來(lái)。所以我們也有兩個(gè)方案,將源代碼直接替換過(guò)來(lái),或者用js在顯示時(shí)候再替換。下面我先介紹直接替換html的方法:

<?
//$content變量的值是前面獲取到的文章內(nèi)容html
$content = str_replace("data-src","src",$content);
?>

然后是視頻,視頻的顯示不正常,經(jīng)過(guò)長(zhǎng)期測(cè)試后發(fā)現(xiàn)只要替換一個(gè)頁(yè)面地址就能解決,過(guò)程就不說(shuō)了,直接說(shuō)結(jié)果:

<?
//$content變量的值是前面獲取到的文章內(nèi)容html
$content = str_replace("preview.html","player.html",$content);
?>

通過(guò)這兩個(gè)替換之后,文章內(nèi)容html中的圖片和視頻就都正常了。

3) 公眾號(hào)相關(guān)信息:

通過(guò)本專(zhuān)欄之前的文章,介紹了我們使用微信客戶端,任意打開(kāi)一個(gè)公眾號(hào)的歷史消息頁(yè)之后。系統(tǒng)從數(shù)據(jù)庫(kù)中識(shí)別biz的值,發(fā)現(xiàn)數(shù)據(jù)庫(kù)中沒(méi)有記錄,就會(huì)插入一條新的紀(jì)錄。之后的采集隊(duì)列就會(huì)定期根據(jù)這個(gè)biz來(lái)獲取這個(gè)公眾號(hào)的歷史消息列表。

但是我們只獲得了這個(gè)公眾號(hào)的biz,公眾號(hào)的名稱(chēng),頭像這兩個(gè)重要信息還是沒(méi)有獲取到。主要原因是歷史消息頁(yè)面中沒(méi)有這兩個(gè)信息。但是我們可以從文章頁(yè)面中獲取到。

在微信文章頁(yè)面html的底部,有一些js的變量賦值的代碼,通過(guò)正則匹配之后我們就可以獲得這兩個(gè)公眾號(hào)的信息:

<?
//$html變量的值是前面獲取到的文章全部html
preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
$nickname = $m[1][0];//公眾號(hào)昵稱(chēng)
preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
$head_img = $m[1][0];//公眾號(hào)頭像
?>

通過(guò)這兩個(gè)正則匹配,我們就能獲取到公眾號(hào)的頭像和昵稱(chēng),然后根據(jù)文章地址中的biz,可以保存到對(duì)應(yīng)的微信號(hào)數(shù)據(jù)表中。

3、文章的保存和處理

前面的代碼已經(jīng)將文章內(nèi)容獲取到變量中了。如何保存其實(shí)每個(gè)人也許都有自己的想法。我這里介紹一下我的保存內(nèi)容的方法:

將文章內(nèi)容的html以數(shù)據(jù)庫(kù)id為文件名保存成html文件,以biz字段為目錄。

<?
$dir = "./".$biz."/";
$filename = $dir.$id.".html";
if(!is_dir($dir)) {
  mkdir($cache_dir);
  chmod($cache_dir,0777);
}
$file = fopen($filename, "w");
fwrite($file, $content);
fclose($file);
?>

以上代碼是一個(gè)標(biāo)準(zhǔn)的php建立文件夾保存文件的代碼,大家可以根據(jù)自己的實(shí)際情況安排保存方法。

在這之后我們就可以在自己的服務(wù)器上得到一個(gè)html文件,內(nèi)容就是公眾號(hào)的文章內(nèi)容。我們可以從瀏覽器中打開(kāi)看一下。這時(shí)你也許會(huì)發(fā)現(xiàn)圖片防盜鏈了!無(wú)法正常顯示!包括數(shù)據(jù)庫(kù)中保存的文章封面圖,公眾號(hào)的頭像都是防盜鏈的。

別急,這個(gè)問(wèn)題很好解決,只需要將圖片也保存到自己的服務(wù)器,無(wú)非是將來(lái)會(huì)占用自己的服務(wù)器空間和帶寬。

圖片防盜鏈的原理是當(dāng)圖片在網(wǎng)頁(yè)中顯示的時(shí)候,圖片服務(wù)器會(huì)檢測(cè)到引用這張圖片的服務(wù)器域名,當(dāng)發(fā)現(xiàn)服務(wù)器域名不包含http://qq.com或http://qpic.cn的時(shí)候就會(huì)被替換成防盜鏈圖片。

但是如果檢測(cè)不到引用頁(yè)面的域名就會(huì)正常顯示,所以我們通過(guò)php的函數(shù)file_get_content()就可以將圖片的二進(jìn)制代碼獲取過(guò)來(lái),然后根據(jù)自己的想法起個(gè)文件名保存到自己的服務(wù)器上。在這里再介紹一個(gè)保存圖片的方法,我目前使用了騰訊云的“萬(wàn)象優(yōu)圖”,通過(guò)它們提供的api將圖片保存到云空間,這樣的好處是讀取圖片時(shí)直接在圖片的鏈接地址加上希望得到的圖片尺寸大小參數(shù),就可以直接得到一張縮略圖。比存在自己的服務(wù)器方便得多。阿里云也應(yīng)該有同樣的產(chǎn)品,好像名叫對(duì)象存儲(chǔ)。

另外,我采集公眾號(hào)內(nèi)容的目的是制作成一個(gè)新聞app,在app中將html代碼顯示出來(lái)之后,因?yàn)閍pp同樣沒(méi)有域名,防盜鏈服務(wù)器也同樣不會(huì)認(rèn)為圖片被盜鏈了。這樣就可以直接顯示圖片出來(lái)。

以上就是我總結(jié)的公眾號(hào)文章內(nèi)容的采集與存儲(chǔ)方法,希望能夠幫到你。

相關(guān)文章

  • CodeIgniter使用phpcms模板引擎

    CodeIgniter使用phpcms模板引擎

    本文介紹CodeIgniter如何使用phpcms的view模板解析功能
    2013-11-11
  • PHP 范圍解析操作符(::)用法分析【訪問(wèn)靜態(tài)成員和類(lèi)常量】

    PHP 范圍解析操作符(::)用法分析【訪問(wèn)靜態(tài)成員和類(lèi)常量】

    這篇文章主要介紹了PHP 范圍解析操作符(::)用法,結(jié)合具體實(shí)例形式分析了PHP使用范圍解析操作符(::)訪問(wèn)靜態(tài)成員和類(lèi)常量相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • CodeIgniter框架數(shù)據(jù)庫(kù)事務(wù)處理的設(shè)計(jì)缺陷和解決方案

    CodeIgniter框架數(shù)據(jù)庫(kù)事務(wù)處理的設(shè)計(jì)缺陷和解決方案

    這篇文章主要介紹了CodeIgniter框架數(shù)據(jù)庫(kù)事務(wù)處理的設(shè)計(jì)缺陷和解決方案,也可以說(shuō)是一個(gè)小BUG,使用CodeIgniter事務(wù)的朋友會(huì)遇到這個(gè)問(wèn)題,需要的朋友可以參考下
    2014-07-07
  • PHP爬蟲(chóng)框架盤(pán)點(diǎn)

    PHP爬蟲(chóng)框架盤(pán)點(diǎn)

    大數(shù)據(jù)分析必定少不了數(shù)據(jù)抓取,只有擁有海量的數(shù)據(jù)才能對(duì)數(shù)據(jù)進(jìn)行對(duì)比分析。因此,網(wǎng)頁(yè)爬蟲(chóng)是作為程序員必須要懂得技能,下文我將通過(guò)文字形式記錄下php的爬蟲(chóng)框架的一些內(nèi)容。需要的小伙伴可以借鑒一下
    2023-04-04
  • 調(diào)用WordPress函數(shù)統(tǒng)計(jì)文章訪問(wèn)量及PHP原生計(jì)數(shù)器的實(shí)現(xiàn)

    調(diào)用WordPress函數(shù)統(tǒng)計(jì)文章訪問(wèn)量及PHP原生計(jì)數(shù)器的實(shí)現(xiàn)

    這篇文章主要介紹了調(diào)用WordPress函數(shù)統(tǒng)計(jì)文章訪問(wèn)量及PHP原生計(jì)數(shù)器的實(shí)現(xiàn),文中作者也提到了WordPress中的兩款插件不過(guò)出于性能考慮并不推薦插件方式的實(shí)現(xiàn),需要的朋友可以參考下
    2016-03-03
  • 基于php解決json_encode中文UNICODE轉(zhuǎn)碼問(wèn)題

    基于php解決json_encode中文UNICODE轉(zhuǎn)碼問(wèn)題

    這篇文章主要介紹了基于php解決json_encode中文UNICODE轉(zhuǎn)碼問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • PhpStorm本地?cái)帱c(diǎn)調(diào)試的方法步驟

    PhpStorm本地?cái)帱c(diǎn)調(diào)試的方法步驟

    php代碼在調(diào)試時(shí),經(jīng)常是print_r或者var_dump來(lái)斷點(diǎn),但是當(dāng)項(xiàng)目較為復(fù)雜的情況下,這么做效率就非常低下了,斷點(diǎn)調(diào)試就非常好的解決了這個(gè)問(wèn)題,這篇文章主要介紹了PhpStorm本地?cái)帱c(diǎn)調(diào)試的方法步驟,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Thinkphp自定義生成縮略圖尺寸的方法

    Thinkphp自定義生成縮略圖尺寸的方法

    這篇文章主要介紹了Thinkphp自定義生成縮略圖尺寸的方法 ,本文給大家介紹的非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • thinkphp的鉤子的兩種配置和兩種調(diào)用方法

    thinkphp的鉤子的兩種配置和兩種調(diào)用方法

    這篇文章主要介紹了thinkphp的鉤子的兩種配置和兩種調(diào)用方法,實(shí)例講解的很清晰,有不懂的同學(xué)可以學(xué)習(xí)下
    2021-02-02
  • 詳解yii2實(shí)現(xiàn)分庫(kù)分表的方案與思路

    詳解yii2實(shí)現(xiàn)分庫(kù)分表的方案與思路

    這篇文章主要介紹了利用yii2實(shí)現(xiàn)分庫(kù)分表的方案與思路,在研究yii2如何分庫(kù)分表之前,我先對(duì)yii2的核心概念和框架結(jié)構(gòu)做了一個(gè)初步的探索,從而找到分庫(kù)分表的思路。有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02

最新評(píng)論