微信公众号所有历史文章的标题/点赞数/阅读数统计

下面这段代码的逻辑起点是页面滑到底部ajax加载的一个链接url_initial(我是在手机微信上在浏览某个公众号的某个页面时send to Chat到自己账号,获得链接后在电脑chrome上打开; 或者可以通过关注 “My Evernote”,把链接发到Evernote的笔记里; 或者在ios平台上好像有发送到邮件的功能,也可以得到这个链接; 但是直接在浏览器中打开或者之间拷贝链接是无效的。然后在浏览器中打开链接,通过检测浏览器访问的Network->XHR找到需要的链接的)

通过观察发现这个加载功能的接口每次访问时返回10个条目,而访问时传到服务器的参数只有frommsgid是改变的,而且是上一次访问的最后一个条目的id。所以可以递归获得所有的条目。

这个加载接口的参数还有几个是和session相关的,导致只能存活20min左右,这时候需要重新通过手机微信去获得url_initial

访问接口的频率不能太快,一次循环结束需要加一句time.sleep(t)其中t>0.5时应该是安全的,否则会被临时禁止访问

单单通过这个方法获得不到阅读数和评论数,http://tool.qoofan.com/weixin/query这个网站提供了API查询阅读数和评论数(但是收费),当然也可以自己尝试着去寻找漏洞自己写API

#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from pyquery import PyQuery as pq
import requests
import codecs
import json
import time
import datetime
def ttd(timestamp):
    timeStr=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
    return timeStr
f=codecs.open('/home/allen/projects/sjtu_news/data_wechat.csv','w','utf-8')
url_initial='https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MDIyMDQyMA==&uin=MjMzNTA3MjQw&key=8dcebf9e179c9f3a15be50268fa7072ea98eab64f47c243ed0a75d48addee99ee76f6585fb67fd0f15a6d32009bfe38b&f=json&frommsgid=1000000038&count=10&uin=MjMzNTA3MjQw&key=8dcebf9e179c9f3a15be50268fa7072ea98eab64f47c243ed0a75d48addee99ee76f6585fb67fd0f15a6d32009bfe38b&pass_ticket=OHlwEqWexZOnMR8LoFoVhpLM7RXg28HZhMrsoP4Rrc0%25253D&wxtoken=&x5=0'
url_head=url_initial[0:url_initial.index('frommsgid=')+len('frommsgid=')]
url_tail=url_initial[url_initial.index('&count='):]
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.17"}
def run(url_initial):
    page=requests.get(url_initial)
    page.encoding='utf-8'
    page_json=json.loads(page.text)
    general_msg_list=page_json['general_msg_list']
    general_msg_list=json.loads(general_msg_list)
    lists=general_msg_list['list']
    # print lists[0]['app_msg_ext_info']['multi_app_msg_item_list'][0]['title']
    last_id=general_msg_list['list'][9]['comm_msg_info']['id']
    # main_title=[general_msg_list['list'][i]['app_msg_ext_info']['title'] for i in range(10)]
    main_title=[]
    for i in range(10):
        try:
            main_title.append(general_msg_list['list'][i]['app_msg_ext_info']['title'])
        except:
            main_title.append(general_msg_list['list'][i]['comm_msg_info']['content'])
    datetime=[general_msg_list['list'][i]['comm_msg_info']['datetime'] for i in range(10)]
    for i in range(10):
        try:
            multi_msg=[general_msg_list['list'][i]['app_msg_ext_info']['multi_app_msg_item_list'] for i in range(10)]
        except:
            multi_msg=[]
    i=0
    for j in multi_msg:
        f.write(str(ttd(datetime[i]))+'\t')
        f.write(main_title[i]+'\t')
        i=i+1
        for k in j:
            f.write(k['title']+'\t')
        f.write('\n')
    return last_id

for i in range(1000):
        rv=run(url_initial)
        print rv
        time.sleep(2)
        url_initial=url_head+str(rv)+url_tail
        # print url_initial

github地址:
https://github.com/wkl7123/CrawlerForWechat

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值