打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
爬虫-微信公众平台消息获取爬虫

帮朋友抓取微信公众平台的用户评论信息。

下面只说核心的部分,怎么获取评论信息。

查看HTML代码,没有发现关于评论部分的标签。看来是用JS动态生成的,但是查找ajax请求也没有找到哪里有返回数据。

最后搜索一下,原来是在这里,很直白的写在了JS里:

[javascript] view plain copy
print?
  1. <script type="text/javascript">  
  2.      wx.cgiData = {  
  3.          total_count : 91,  
  4.          latest_msg_id : '200325222',  
  5.          count : "20"*1 || 20,  
  6.          day : "7",  
  7.          frommsgid : "",  
  8.          can_search_msg : "1",  
  9.          offset : "",  
  10.          action : "",  
  11.          keyword : "",  
  12.          list : ({"msg_item":[{"id":200322761,"type":1,"fakeid":"593656935","nick_name":"Suang 1","date_time":1398854675,"content":"记得帮我查一下是不是这个电话!","source":"","msg_status":4,"has_reply":0,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},{"id":200322760,"type":2,"fakeid":"593656935","nick_name":"Suang 1","date_time":1398854664,"source":"","msg_status":4,"has_reply":0,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},{"id":200322759,"type":1,"fakeid":"593656935","nick_name":"Suang 1","date_time":1398854659,"content":"勐璇,我看到那人了!","source":"","msg_status":4,"has_reply":0,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},{"id":200322344,"type":2,"fakeid":"1994400010","nick_name":"ABC的CBA","date_time":1398839849,"source":"","msg_status":4,"has_reply":0,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},{"id":200321209,"type":1,"fakeid":"1591078101","nick_name":"倚(纺织服装)","date_time":1398788906,"content":"\/::<","source":"","msg_status":4,"has_reply":0,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},{"id":200321206,"type":2,"fakeid":"1591078101","nick_name":"倚(纺织服装)","date_time":1398788859,"source":"","msg_status":4,"has_reply":1,"refuse_reason":"","multi_item":[],"to_uin":3071594631,"send_stat":{"total":0,"succ":0,"fail":0}},  

用的是JSON格式,代码太乱,放在Eclipse里格式化一下,消息列表大概就是这个样了:

[javascript] view plain copy
print?
  1. {"msg_item" :[ {  
  2.     "id" : 200322761,  
  3.     "type" : 1,  
  4.     "fakeid" : "593656935",  
  5.     "nick_name" : "Suang 1",  
  6.     "date_time" : 1398854675,  
  7.     "content" : "记得帮我查一下是不是这个电话!",  
  8.     "source" : "",  
  9.     "msg_status" : 4,  
  10.     "has_reply" : 0,  
  11.     "refuse_reason" : "",  
  12.     "multi_item" : [],  
  13.     "to_uin" : 3071594631,  
  14.     "send_stat" : {  
  15.         "total" : 0,  
  16.         "succ" : 0,  
  17.         "fail" : 0  
  18.     }  
  19. }, {  
  20.     "id" : 200322760,  
  21.     "type" : 2,  
  22.     "fakeid" : "593656935",  
  23.     "nick_name" : "Suang 1",  
  24.     "date_time" : 1398854664,  
  25.     "source" : "",  
  26.     "msg_status" : 4,  
  27.     "has_reply" : 0,  
  28.     "refuse_reason" : "",  
  29.     "multi_item" : [],  
  30.     "to_uin" : 3071594631,  
  31.     "send_stat" : {  
  32.         "total" : 0,  
  33.         "succ" : 0,  
  34.         "fail" : 0  
  35.     }  
  36. }  
  37. ]  
  38. }  

上面就是 json字符串 中 msg_item 所对应的列表里的对象。

可以看出这个是一个数组,每个评论是里面的一个对象。怎么生成对于的Java类呢 ?


这里有一个在线的工具:http://jsongen.byingtondesign.com/

可以根据JSON 字符串,生成对应的java类:

 类1

  1. import java.util.List;  
  2.   
  3. public class MessageList{  
  4.     private List<Message> msg_item;  
  5.   
  6.     public List<Message> getMsg_item() {  
  7.         return msg_item;  
  8.     }  
  9.   
  10.     public void setMsg_item(List<Message> msgItem) {  
  11.         msg_item = msgItem;  
  12.     }  
  13.       
  14. }  
类2。部分字段没有用,删掉了

  1. public class Message {  
  2.   
  3.     private String content;  
  4.     private long date_time;  
  5.     private String fakeid;  
  6.     private int has_reply;  
  7.     private long id;  
  8.     private int msg_status;  
  9.     private String nick_name;  
  10.     private String refuse_reason;  
  11.     private String source;  
  12.     private long to_uin;  
  13.     private int type;  
  14. // get set 略去  
  15. }  


下面来做个测试。用google的 Gson 来进行处理,把json字符串解析为 java对象。

  1. //jsonstr 为 msg_item 的json字符串  
  2.         MessageList msgList = new Gson().fromJson(jsonstr, MessageList.class);  
  3.         System.out.println(msgList.getMsg_item().size());  

解析成功。所有的对象都在 msgList里了

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python爬虫实战练习:爬取微信公众号文章
利用公众平台模拟登录发送微信消息给指定好友上(原创)
30分钟学会微信公众号的数据抓取
Python入门学习教程:50行Python代码,教你获取公众号全部文章
拒绝低效!Python教你爬虫公众号文章和链接
惊!Python爬虫只需10行代码,海量公众号文章任你爬!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服