在线工具:微信文章转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里面有两个参数是比较重要的,下面方法中会用到:
- timestamp:
1486126386
- signature:
lnkECanZ6wCApm3BZ2Tsv1D9w5hX9ZYrn3SkBX31HChzFvWju-TpJEcRUyqTG1dg*rJfa8u73L6diEIRbTIBugnWnB8VLBOAc7eJIdUmk2Lxqd*njb24cM4e7OMjX8yN7t8GjyAeH3v6zQzDSWecVU5cRCWaf5DZM9QU49VNt5k=
虽然浏览器会显示阅读数和点赞数,但通过查看网页源代码可知,阅读量和点赞量这两个数据并不在源代码之中,即这两个数据是通过JavaScript后期所生成的。所以直接通过Python获取此网页源码,并不会包含阅读量和点赞量。
幸运的是,有个接口,可以直接获得阅读量和点赞量这两个数据。注意下面链接中的timestamp
和signature
参数,即是通过上面临时链接中所提取出来的:
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_num
和like_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)