微信文章采集软件(一个微信公众号历史消息页的采集方法整理之后写)

优采云 发布时间: 2021-09-18 09:09

  微信文章采集软件(一个微信公众号历史消息页的采集方法整理之后写)

  2014年开始批量做微信公众号采集。最初的目标是制作一个HTML5垃圾内容网站. 来到垃圾站的微信官方账号采集的内容很容易在官方账号中传播。当时,采集特别擅长批量生产,采集入口是官方账户的历史页面。到目前为止,这个入口还是一样的,但是越来越难了采集采集也在许多版本中进行了更新。2015年,HTML5垃圾站没有这样做,将采集目标转移到当地新闻信息官方账户。前端显示它是一个应用程序。于是,一个可以自动采集官方账号的新闻应用程序诞生了。有一次我担心微信技术升级后的某一天,我无法采集内容,我的新闻应用程序会失败。不过,随着微信技术的不断升级,采集方式也在升级,这让我越来越自信。只要官方帐户历史页面存在,就可以将批采集发送到内容。所以今天我决定把采集方法整理好并写下来。我的方法来自于许多同龄人的分享精神,因此我将继续这种精神,分享我的成就

  这篇文章文章将不断更新,您看到的内容将在您看到它时提供

  首先,我们来看看微信公众号历史信息页面的链接地址:

  http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzczNjY2NA==&uin=NzM4MTk1ODgx&key=9ed31d4918c154c8e04cb95d0b28d07ae8eda2ba29a25f538d06adfa060e5d7d42a1427e8f9cfb6a4c3ecc0903a1a9ab87d1471e43705a8b04e1a796612405546f901ec1e4ea662122bb9235f4dfea4d&devicetype=android-17&version=26031c34&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=iyVknv0cBEc1Z8oR4zVs%2BkLeRwYtW5bbtL4Tj9bm%2FwgjP%2BsobV6en3WohWUOllUU&wx_header=1

  有几个参数:

  __商业;uin=;键=;devicetype=;版本=;朗=;nettype=;上升=;通行证;wx_uu头=

  重要参数为:_uuuiz;uin=;键=;通行证;这四个参数

  __官方帐户官方帐户是一个类似于业务的id参数。每个官方账号都有一个微信商务。目前,当公众数量较低时,商业变化的可能性会出现。p>

  其余三个参数是指用户的ID和令牌票证。这三个参数的值只能通过微信客户端生成。所以我们认为采集官方账号必须通过微信客户端app传递。在之前的微信版本中,3个参数在有效期内可以比官方账号多获取一次。当前版本是,每次访问官方帐户时,参数值都会更改。p>

  我现在使用的方法只需要关注biz参数就可以了

  My采集系统由以下部分组成:

  1、a微信客户端:可以是安装在手机上的微信应用程序,也可以是安装在电脑上的Android模拟器。根据实际测量,IOS微信客户端在批采集进程中的崩溃率高于Android系统。为了降低成本,我使用了Android模拟器

  2、a微信个人号:对于采集内容,不仅是一个微信客户端,还有一个微信个人号专门用于采集,因为这个微信信号不能做其他事情

  3、local proxy server系统:目前的方式是通过Anyproxy代理服务器将官方账户历史消息页面中的文章列表发送到自己的服务器。具体的安装和设置方法将在后面详细介绍

  4、文章列表分析和仓库系统:我是用PHP语言写的。稍后,我将详细介绍如何分析文章list,建立采集queue,实现批量采集content

  台阶

  一、安装模拟器或使用手机安装微信客户端应用程序,申请微信个人号码并登录应用程序。这只不过是一个介绍,每个人都会

  二、代理服务器系统安装

  现在我用的是anyproxy,anyproxy。该软件的特点是可以获取HTTPS链接的内容。2016年初,微信公众号和微信文章开始使用HTTPS链接。任何代理都可以通过修改规则配置将脚本代码插入到官方帐户页面。让我们从安装和配置过程开始

  1、安装节点

  2、run NPM install-G anyproxy在命令行或终端上,sudo应该添加到MAC系统中

  3、generate rootca,HTTPS需要此证书:运行命令sudo anyproxy--root(windows可能不需要sudo)

  4、start anyproxy run命令:sudo anyproxy-I;参数-I表示解析HTTPS

  5、install certificate,在手机或Android模拟器中安装证书:

  方法1:启动anyproxy,打开浏览器:8002/fetchcr。。。并获取rootca.crt文件

  方法二:启动anyproxy,:8002/QR_uuuuroot可以获取证书路径的二维码,便于在移动终端上安装

  建议通过二维码将证书安装到手机中

  6、set proxy:Android模拟器的代理服务器地址为WiFi连接网关。将DHCP设置为静态后,您可以看到网关地址。阅读后不要忘记将其设置为自动。移动电话中的代理服务器地址是运行任何代理的计算机的IP地址。代理服务器的默认端口为8001

  现在打开微信,点击任何官方账户历史信息或文章,可以在终端上看到响应代码滚动。如果没有,请检查手机的代理设置是否正确

  现在打开浏览器地址:8002以查看anyproxy的web界面。单击打开微信历史信息页面,然后查看浏览器的web界面。历史信息页面的地址将滚动显示

  以/MP/getmasssendmsg开头的URL是微信历史信息页面。左边的一个小锁表示该页面是用HTTPS加密的。现在让我们点击这一行

  如果HTML文件内容显示在右侧,则表示解密成功。如果没有内容,请检查anyproxy的操作模式是否有参数I,CA证书是否生成,证书安装是否正确

  现在,我们手机上的所有内容都可以通过代理服务器以明文形式显示。接下来,我们需要修改配置代理服务器以获得官方帐号。p>

  一、found配置文件:

  配置文件在MAC系统中的位置是/usr/local/lib/node_uu;modules/anyproxy/lib/;Windows系统,请原谅我不知道。您应该能够根据类似Mac的文件夹地址找到此目录

  二、modify file rule_uudefault.js

  查找replaceserverresdataasync:function(req、res、serverresdata、callback)函数

  修改功能内容(请详细阅读注释,以下仅为原则,理解后根据自己的情况修改内容):

  replaceServerResDataAsync: function(req,res,serverResData,callback){

if(/mp\/getmasssendmsg/i.test(req.url)){//当链接地址为公众号历史消息页面时

try {//防止报错退出程序

var reg = /msgList = (.*?);\r\n/;//定义历史消息正则匹配规则

var ret = reg.exec(serverResData.toString());//转换变量为string

HttpPost(ret[1],req.url,"getMsgJson.php");//这个函数是后文定义的,将匹配到的历史消息json发送到自己的服务器

var http = require('http');

http.get('http://xxx.com/getWxHis.php', function(res) {//这个地址是自己服务器上的一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxHis.php的原理。

res.on('data', function(chunk){

callback(chunk+serverResData);//将返回的代码插入到历史消息页面中,并返回显示出来

})

});

}catch(e){//如果上面的正则没有匹配到,那么这个页面内容可能是公众号历史消息页面向下翻动的第二页,因为历史消息第一页是html格式的,第二页就是json格式的。

try {

var json = JSON.parse(serverResData.toString());

if (json.general_msg_list != []) {

HttpPost(json.general_msg_list,req.url,"getMsgJson.php");//这个函数和上面的一样是后文定义的,将第二页历史消息的json发送到自己的服务器

}

}catch(e){

console.log(e);//错误捕捉

}

callback(serverResData);//直接返回第二页json内容

}

}else if(/mp\/getappmsgext/i.test(req.url)){//当链接地址为公众号文章阅读量和点赞量时

try {

HttpPost(serverResData,req.url,"getMsgExt.php");//函数是后文定义的,功能是将文章阅读量点赞量的json发送到服务器

}catch(e){

}

callback(serverResData);

}else if(/s\?__biz/i.test(req.url) || /mp\/rumor/i.test(req.url)){//当链接地址为公众号文章时(rumor这个地址是公众号文章被辟谣了)

try {

var http = require('http');

http.get('http://xxx.com/getWxPost.php', function(res) {//这个地址是自己服务器上的另一个程序,目的是为了获取到下一个链接地址,将地址放在一个js脚本中,将页面自动跳转到下一页。后文将介绍getWxPost.php的原理。

res.on('data', function(chunk){

callback(chunk+serverResData);

})

});

}catch(e){

callback(serverResData);

}

}else{

callback(serverResData);

}

},

  上面的代码使用anyproxy修改返回页面内容的功能,将脚本注入页面,并将页面内容发送到服务器。利用这一原则批量采集官方账户内容和阅读量。此脚本定义了一个函数,下面将对其进行详细描述:

  在规则中,将以下代码添加到default.js文件的末尾:

  function HttpPost(str,url,path) {//将json发送到服务器,str为json内容,url为历史消息页面地址,path是接收程序的路径和文件名

var http = require('http');

var data = {

str: encodeURIComponent(str),

url: encodeURIComponent(url)

};

content = require('querystring').stringify(data);

var options = {

method: "POST",

host: "www.xxx.com",//注意没有http://,这是服务器的域名。

port: 80,

path: path,//接收程序的路径和文件名

headers: {

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

"Content-Length": content.length

}

};

var req = http.request(options, function (res) {

res.setEncoding('utf8');

res.on('data', function (chunk) {

console.log('BODY: ' + chunk);

});

});

req.on('error', function (e) {

console.log('problem with request: ' + e.message);

});

req.write(content);

req.end();

}

  以上是规则修改的主要部分。您需要向服务器发送JSON内容,并从服务器获取下一页的跳转地址。这涉及四个PHP文件:getmsgjason.PHP、getmsgext.PHP、getwxhis.PHP和getwxpost.PHP

  在详细介绍这四个PHP文件之前,我们还可以进行一些修改,以提高采集系统性能并降低崩溃率:

  Android模拟器经常访问一些地址,这将导致任何代理崩溃。查找函数replacerequestoption:function(req,option),并修改函数内容:

  replaceRequestOption : function(req,option){

var newOption = option;

if(/google/i.test(newOption.headers.host)){

newOption.hostname = "www.baidu.com";

newOption.port = "80";

}

return newOption;

},

  以上是anyproxy规则文件的修改配置。配置修改完成后,重新启动anyproxy。在MAC系统中,按control+C中断程序,然后输入sudo anyproxy-I命令启动;如果在启动时报告错误,程序可能无法完全退出,端口被占用。此时,输入命令PS-A以查看占用的PID,然后输入命令“kill-9PID”。这里,用查询的PID编号替换PID。终止进程后,可以启动任何代理。请原谅我不熟悉windows的命令

  接下来,详细介绍了服务器端接收程序的设计原理:

  (下面的代码不是直接可用的,只是介绍了原理。其中一些代码需要根据自己的服务器数据库框架编写)

  1、getMsgJson.php:该程序负责接收历史消息的JSON并将其解析到数据库中

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线