获取搜狗微信中文章的阅读量和点赞量等数据

在线工具:微信文章转PDF

搜狗微信搜索链接为临时链接

通过搜狗微信搜索(weixin.sogou.com)搜索出来的文章,在文章底部都是有阅读数和点赞数等数据的。其打开文章页面的链接是临时链接,和平时通过微信朋友圈分享的链接不一样,看下面可以看出具体的区别:

搜狗微信单篇文章链接:
http://mp.weixin.qq.com/s?timestamp=1486126386&src=3&ver=1&signature=lnkECanZ6wCApm3BZ2Tsv1D9w5hX9ZYrn3SkBX31HChzFvWju-TpJEcRUyqTG1dg*rJfa8u73L6diEIRbTIBugnWnB8VLBOAc7eJIdUmk2Lxqd*njb24cM4e7OMjX8yN7t8GjyAeH3v6zQzDSWecVU5cRCWaf5DZM9QU49VNt5k=

永久链接:
http://mp.weixin.qq.com/s?__biz=MzI4NjQyMTM2Mw==&mid=2247483659&idx=1&sn=0df398158e5ff9a76224309310bae1e1&mpshare=1&scene=1&srcid=0203D18zRj9KotP8Eg6Vbts1#rd

本篇文章所获取的阅读量和点赞量等数据,是基于搜狗微信搜索中的临时链接的,即上面第一种。下面所使用的链接,也是上面第一条链接。

不出意外的话,您在浏览本文时,上面第一条链接将会失效,所以您如果需要测试本文提供的方法,请自己通过搜狗微信获取下任意一篇此时此刻的临时链接。

获取阅读量和点赞量的方法

此搜狗微信单篇文章的url里面有两个参数是比较重要的,下面方法中会用到:

  1. timestamp:1486126386
  2. signature:lnkECanZ6wCApm3BZ2Tsv1D9w5hX9ZYrn3SkBX31HChzFvWju-TpJEcRUyqTG1dg*rJfa8u73L6diEIRbTIBugnWnB8VLBOAc7eJIdUmk2Lxqd*njb24cM4e7OMjX8yN7t8GjyAeH3v6zQzDSWecVU5cRCWaf5DZM9QU49VNt5k=

虽然浏览器会显示阅读数和点赞数,但通过查看网页源代码可知,阅读量和点赞量这两个数据并不在源代码之中,即这两个数据是通过JavaScript后期所生成的。所以直接通过Python获取此网页源码,并不会包含阅读量和点赞量。

幸运的是,有个接口,可以直接获得阅读量和点赞量这两个数据。注意下面链接中的timestampsignature参数,即是通过上面临时链接中所提取出来的:

http://mp.weixin.qq.com/mp/getcomment?src=3×tamp=1486126386&ver=1&signature=lnkECanZ6wCApm3BZ2Tsv1D9w5hX9ZYrn3SkBX31HChzFvWju-TpJEcRUyqTG1dg*rJfa8u73L6diEIRbTIBugnWnB8VLBOAc7eJIdUmk2Lxqd*njb24cM4e7OMjX8yN7t8GjyAeH3v6zQzDSWecVU5cRCWaf5DZM9QU49VNt5k=

通过GET方法请求上面链接、或直接复制上面链接在浏览器中打开,便可返回下面内容:

{"base_resp":{"ret":0,"errmsg":"ok"},"comment":[],"elected_comment_total_cnt":0,"read_num":8,"like_num":1}

其中read_numlike_num即我们的目标,文章此时此刻的阅读量和点赞量。编码时,只需通过正则表达式提取上面的内容即可。

思路有了,编码部分便很简单了,下面给出最简单的代码。

具体获取阅读量和点赞量的Python代码

#coding:utf-8
import requests,re
# 输入基于搜狗微信的文章临时链接,获取阅读数和点赞数
def get_c_detail(url):
    # 临时文章链接
    linshi_link = url.encode('utf-8')
    # 正则表达式,提取timestamp和signature参数
    timestamp = re.findall('timestamp=(\d+)',url)[0]
    signature = re.findall('signature=(.+)',url)[0]
    # 生成接口链接
    s = 'http://mp.weixin.qq.com/mp/getcomment?src=3×tamp=%s&ver=1&signature=%s' % (timestamp,signature)
    # get方法获取接口信息
    r = requests.get(s)
    if r.status_code == 200:
        c = r.content
        # 正则表达式,提取阅读数和点赞数
        # 阅读数
        read_num = re.findall('"read_num":(\d+)',c)[-1]
        # 点赞数
        like_num = re.findall('"like_num":(\d+)',c)[-1]
        return read_num,like_num

url = 'http://mp.weixin.qq.com/s?timestamp=1486126386&src=3&ver=1&signature=lnkECanZ6wCApm3BZ2Tsv1D9w5hX9ZYrn3SkBX31HChzFvWju-TpJEcRUyqTG1dg*rJfa8u73L6diEIRbTIBugnWnB8VLBOAc7eJIdUmk2Lxqd*njb24cM4e7OMjX8yN7t8GjyAeH3v6zQzDSWecVU5cRCWaf5DZM9QU49VNt5k='
print get_c_detail(url)

你可能感兴趣的:(获取搜狗微信中文章的阅读量和点赞量等数据)