单个微信公众号抓取
最近看了很多公众号的文章,突然想把全部的公众号抓取的想法.
于是,搜了一下,发现很多的博客写怎么抓取,但是尝试下来,还是比较麻烦,基本上没有几个可以使用的.
于是研究一下思路,主要是将文章列表转到浏览器上,然后再进行抓取.
于是我本人就按这个思路,自己做了一个微信公众号的爬虫,虽然速度比较慢,但是也够爬下来列表了.
下面是详细步骤
- 首先在微信的客户端上登录
- 点击头像 进入公众号
- 点击公众号的头像,找文章列表按钮
- 然后将文章列表点开,
- 转发给自己的 文件传输助手
- 用默认浏览器打开 我选择的本地浏览器是 搜狗
- 按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再操作一遍
- 抓取完成后,会产生一个下载文件,下载到本地,就拿到了该公众号的全部文件.
- 详细的列表页,可以单独抓取.
操作起来比较简单,就是要等页面抓取完才能挪动页面,相对来说比较简单.