设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 运营中心 > 网站设计 > 正文

详细Java批量获取微信公众号方法(2)

发布时间:2021-02-21 17:01 所属栏目:12 来源:网络整理
导读:这里简单解释一下,微信公众号的历史消息页链接有两种形式:一种以mp.weixin.qq.com/mp/getmasssendmsg开头,另一种是mp.weixin.qq.com/mp/profile_ext 开头。历史页是可以向下翻的,如果向下翻将触发js事件发送请

这里简单解释一下,微信公众号的历史消息页链接有两种形式:一种以 mp.weixin.qq.com/mp/getmasssendmsg 开头,另一种是 mp.weixin.qq.com/mp/profile_ext 开头。历史页是可以向下翻的,如果向下翻将触发js事件发送请求得到json数据(下一页内容)。还有公众号文章链接,以及文章的阅读量和点赞量的链接(返回的是json数据),这几种链接的形式是固定的可以通过逻辑判断来区分。这里有个问题就是历史页如果需要全部爬取到该怎么做到。我的思路是通过js去模拟鼠标向下滑动,从而触发提交加载下一部分列表的请求。或者直接利用anyproxy分析下滑加载的请求,直接向微信服务器发生这个请求。但都有一个问题就是如何判断已经没有余下数据了。我是爬取最新数据,暂时没这个需求,可能以后要。如果有需求的可以尝试一下。

下图是上文中的HttpPost方法内容。

 function HttpPost(str,url,path) {//将json发送到服务器,str为json内容,url为历史消息页面地址,path是接收程序的路径和文件名
     console.log("开始执行转发操作");
     try{
     var http = require('http');
     var data = {
         str: encodeURIComponent(str),
         url: encodeURIComponent(url)
     };
     data = require('querystring').stringify(data);
     var options = {
         method: "POST",
         host: "xxx",//注意没有http://,这是服务器的域名。
         port: xxx,
         path: path,//接收程序的路径和文件名
         headers: {
             'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
             "Content-Length": data.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(data);
     req.end();
     }catch(e){
         console.log("错误信息:"+e);
     }
     console.log("转发操作结束");
 }

做完以上工作,接下来就是按自己业务来完成服务端代码了,我们的服务用于接收代理服务器发过来的数据进行处理,进行持久化操作,同时向代理服务器发送需要注入到微信的js代码。针对代理服务器拦截到的几种不同链接发来的数据,我们就需要设计相应的方法来处理这些数据。从anyproxy处理微信数据的js方法replaceServerResDataAsync: function(req,callback)中,我们可以知道至少需要对公众号历史页数据、公众号文章页数据、公众号文章点赞量和阅读量数据设计三种方法来处理。同时我们还需要设计一个方法来生成爬取任务,完成公众号的轮寻爬取。如果需要爬取更多数据,可以从anyproxy抓取到的链接中分析出更多需要的数据,然后往replaceServerResDataAsync: function(req,callback)中添加判定,拦截到需要的数据发送到自己的服务器,相应的在服务端添加方法处理该类数据就行了。

我是用java写的服务端代码。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读