單個微信公衆號抓取
最近看了很多公衆號的文章,突然想把全部的公衆號抓取的想法.
於是,搜了一下,發現很多的博客寫怎麼抓取,但是嘗試下來,還是比較麻煩,基本上沒有幾個可以使用的.
於是研究一下思路,主要是將文章列表轉到瀏覽器上,然後再進行抓取.
於是我本人就按這個思路,自己做了一個微信公衆號的爬蟲,雖然速度比較慢,但是也夠爬下來列表了.
下面是詳細步驟
- 首先在微信的客戶端上登錄
- 點擊頭像 進入公衆號
- 點擊公衆號的頭像,找文章列表按鈕
- 然後將文章列表點開,
- 轉發給自己的 文件傳輸助手
- 用默認瀏覽器打開 我選擇的本地瀏覽器是 搜狗
- 按F12打開 頁面調試
- 進入到console 裏複製下面的代碼進去
let map = new Map();
let lis = [];
let before = 0;
let inter = 0;
let scrollToY = 0;
function scrollMyPage(){
inter = setInterval(collect_data,2000);
}
function collect_data(){
before = map.size;
let msgs = document.getElementsByClassName("weui_media_box");
for(let msg of msgs){
let dt_ele = msg.getElementsByClassName("weui_media_extra_info")
let title_ele = msg.getElementsByClassName("weui_media_title");
let dt = dt_ele[0].innerText;
let title = "";
let url = "";
try{
url = title_ele[0].attributes["hrefs"].nodeValue;
title = title_ele[0].innerText;
}catch(e){
console.log(e);
console.log(msg);
}
let obj = {};
obj["dt"] = dt;
obj["url"] = url;
obj["title"] = title;
map.set(url,obj)
}
//操作過後,就沒數據了...
if(before == map.size){
clear_inter();
save_data();
}
scrollToY = scrollToY + 4000;
window.scrollTo(0,scrollToY);
}
function save_data(){
for(let ent of map){
lis.push(ent[1]);
}
// 創建a標籤
var elementA = document.createElement('a');
//文件的名稱爲時間戳加文件名後綴
elementA.download = +new Date() + ".json";
elementA.style.display = 'none';
//生成一個blob二進制數據,內容爲json數據
var blob = new Blob([JSON.stringify(lis)]);
//生成一個指向blob的URL地址,並賦值給a標籤的href屬性
elementA.href = URL.createObjectURL(blob);
document.body.appendChild(elementA);
elementA.click();
document.body.removeChild(elementA);
}
function clear_inter(){
clearInterval(inter);
}
scrollMyPage();
- 等待頁面抓取完成,注意不要關閉頁面,如果頁面沒有到底就停止了抓取,就重新打開頁面,然後按F12再操作一遍
- 抓取完成後,會產生一個下載文件,下載到本地,就拿到了該公衆號的全部文件.
- 詳細的列表頁,可以單獨抓取.
操作起來比較簡單,就是要等頁面抓取完才能挪動頁面,相對來說比較簡單.