亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

基于anyproxy的微信公眾號文章爬取,收錄閱讀數點(diǎn)贊數

優(yōu)采云 發(fā)布時(shí)間: 2020-08-27 21:23

  基于anyproxy的微信公眾號文章爬取,收錄閱讀數點(diǎn)贊數

  github項目地址

  錄制的視頻:點(diǎn)擊抵達

  

  基本原理AnyProxy是一個(gè)阿里開(kāi)源的HTTP代理服務(wù)器,類(lèi)似fiddler和charles,但是提供了二次開(kāi)發(fā)能力,可以編撰js代碼改變http/https懇求和響應為了爬取一個(gè)微信公眾號的全部文章,首先就是獲取全部文章,然后一篇一篇去打開(kāi)獲取文章標題,作者,閱讀數,點(diǎn)贊數(這兩個(gè)只能在微信瀏覽器獲?。┟總€(gè)微信公眾號都提供查看歷史消息的功能,點(diǎn)擊去打開(kāi)這個(gè)網(wǎng)頁(yè),不停下滾,可以查到全部發(fā)布文章。在這一步,基于anyproxy,修改了這個(gè)網(wǎng)頁(yè)html,注入一段使頁(yè)面不停往下滾動(dòng)的js腳本,當滾到頂部,就獲取了全部文章列表。 本質(zhì)上是中間人攻擊。

  獲取完全部文章的內容(包括url,標題,發(fā)布時(shí)間等等)后,下一步就是循環(huán)通知陌陌瀏覽器一個(gè)一個(gè)去打開(kāi)這種文章網(wǎng)頁(yè)。每個(gè)文章網(wǎng)頁(yè)也注入js腳本,功能是不停的檢測頁(yè)面的點(diǎn)贊數和閱讀數,檢測到,就往某服務(wù)器發(fā),后臺每成功收到一個(gè)文章的點(diǎn)贊數和閱讀數,就通知陌陌瀏覽器打開(kāi)下一個(gè)url。這里我使用了socketio,實(shí)現陌陌瀏覽器和自建的koa服務(wù)器之間的通信。

  如圖所示:

  

  獲取文章列表演示

  

  一篇一篇打開(kāi)文章鏈接

  如何運行

  第一步,一定要安裝成功anyproxy,這一步請詳盡閱讀anyproxy的官方教程,寫(xiě)的太詳盡,要保證能成功代理https,能查看到https的body內容。

  npm install

npm start

  會(huì )手動(dòng)打開(kāi)一個(gè)result.html,實(shí)時(shí)查看爬取文章的內容

  點(diǎn)擊一個(gè)微信公眾號,點(diǎn)擊查看歷史消息,之后歷史頁(yè)面會(huì )不停的滾動(dòng)究竟,滾動(dòng)完畢,就開(kāi)始一篇一篇打開(kāi)文章,爬取內容。

  

  實(shí)時(shí)結果顯示.jpg

  具體過(guò)程

  1.第一步,要獲取一個(gè)公眾號的全部歷史文章。在早已設置好anyproxy代理的真機上,查看歷史消息,這時(shí)陌陌會(huì )打開(kāi)歷史文章網(wǎng)頁(yè)。

  獲取一個(gè)html文檔:

  

  ,var msgList就是我們須要的歷史文章數據,簡(jiǎn)單正則匹配下來(lái),替代非法字符,JSON.parse轉成我們須要的格式。 基于anyproxy,我們給這個(gè)html文檔注入一段腳本,目的是使這個(gè)網(wǎng)頁(yè)不停的往下自己滾動(dòng),觸發(fā)瀏覽器去獲得更多的文章。

  var scrollKey = setInterval(function () {

window.scrollTo(0,document.body.scrollHeight);

},1000);

  當網(wǎng)頁(yè)滾究竟,再次獲取文章,這個(gè)時(shí)侯,同樣的是get懇求,但是返回了Content-Type為application/json的格式,這里同樣的方式,正則匹配找出并低格成我們須要的格式

  

  同時(shí)當can_msg_continue為0時(shí),表示早已拉到底,獲取了全部文章。

  至此,獲得了一個(gè)公眾號的全部文章,包括文章標題,作者,url。但是沒(méi)有閱讀數和點(diǎn)贊數,這須要打開(kāi)具體的文章鏈接,才能看得到。

  我們還沒(méi)獲得閱讀數和點(diǎn)贊數,接下來(lái)就是一步一步使微信瀏覽器不停地打開(kāi)具體文章,觸發(fā)陌陌瀏覽器獲取閱讀數和點(diǎn)贊數。這里使用了socket.io,讓文章頁(yè)面聯(lián)接自定義的服務(wù)器,服務(wù)器主動(dòng)通知瀏覽器下一個(gè)點(diǎn)開(kāi)的文章鏈接,這樣單向通信,一個(gè)循環(huán)才能獲取具體文章的閱讀數和點(diǎn)贊。

  socket.on('url', function (data) {

window.location = data.url;

});

  閱讀數和點(diǎn)贊可以在瀏覽器端,不停檢測dom元素是否渲染下來(lái)之后搜集發(fā)往服務(wù)器,也可以直接anyproxy檢測下來(lái)(這里我采用前一種)。

  key = setInterval(function () {

var readNum = $('#readNum3').text().trim();

if (!readNum) return;

var likeNum = $('#likeNum3').text().trim();

var postUser = $('#post-user').text().trim();

var postDate = $('#post-date').text().trim() || $('#publish_time').text().trim();

var activityName = $('#activity-name').text().trim();

var js_share_source = $('#js_share_source').attr('href');

socket.emit('crawler', {

readNum: readNum,

likeNum: likeNum,

postUser: postUser,

postDate: postDate,

activityName: activityName,

js_share_source: js_share_source

});

}, 1000);

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久