手写抓取单个微信公众号的全部文章列表

单个微信公众号抓取

最近看了很多公众号的文章,突然想把全部的公众号抓取的想法.
于是,搜了一下,发现很多的博客写怎么抓取,但是尝试下来,还是比较麻烦,基本上没有几个可以使用的.
于是研究一下思路,主要是将文章列表转到浏览器上,然后再进行抓取.
于是我本人就按这个思路,自己做了一个微信公众号的爬虫,虽然速度比较慢,但是也够爬下来列表了.
下面是详细步骤

  1. 首先在微信的客户端上登录
  2. 点击头像 进入公众号
    在这里插入图片描述
  3. 点击公众号的头像,找文章列表按钮
    在这里插入图片描述
  4. 然后将文章列表点开,
  5. 转发给自己的 文件传输助手
    在这里插入图片描述
  6. 用默认浏览器打开 我选择的本地浏览器是 搜狗
  7. 按F12打开 页面调试
  8. 进入到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();
  1. 等待页面抓取完成,注意不要关闭页面,如果页面没有到底就停止了抓取,就重新打开页面,然后按F12再操作一遍
  2. 抓取完成后,会产生一个下载文件,下载到本地,就拿到了该公众号的全部文件.
  3. 详细的列表页,可以单独抓取.

操作起来比较简单,就是要等页面抓取完才能挪动页面,相对来说比较简单.

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值