实现这一个功能主要用到了selenium、mitmproxy和wechatarticles,利用selenium可以实现脚本模拟浏览器访问,mitmproxy配合wechatarticles获取文章信息。
参考文章:
python爬取微信公众号文章(包含文章内容和图片)
记一次微信公众号爬虫的经历(微信文章阅读点赞的获取)
微信公众号文章全自动采集(使用mitmproxy抓包,然后用pywinauto实现自动点击)微信app_msg动态获取

selenium

  selenium有一个官网,建议通过官网的教程入门。Getting Started主要有两步(我用的是python),一个是安装python的包,另一个就是还要下载浏览器的驱动文件,并且设置好环境变量。

mitmproxy

  mitmproxy也有一个官网,在官网文档里的Getting Started里面写了,它默认监听本地的8080端口。有了这个代理,我们就可以获取网络传输中的数据包,要把它用起来就需要对代理进行设置。因为后面需要微信客户端的数据包收发进行监听,所以我直接对系统的代理进行了设置。
  可以直接在windows桌面的搜索栏中搜索“代理”,就可以找到“代理服务器设置”,然后手动如图设置代理即可。

具体实现流程

  具体步骤分为两步:

  • 首先要获取想了解的公众号的所有文章链接;
  • 再通过这些文章链接获取具体的文章信息

文章链接获取

  按照上面第一篇参考文章中的方法,获取文章链接。值得一提的是,只要有微信和一个邮箱,就可以注册一个订阅号。这个邮箱绑定了订阅号之后就不能用来绑定其他的东西了,比如小程序。就一开始我的微信用一个邮箱绑定了一个小程序,然后微信登录的时候一直只有小程序的选项。这个时候其实只需要再搞一个邮箱,然后注册一个订阅号就可以了。
  公众号管理界面可能跟上面文章中所说的不一样了,但实际上变化不大,还是只需要通过创建新的图文消息,来进入公众号文章链接引用的界面。


  利用login.py和get_article_link.py两个文件获取所有文章链接。首先用login.py获取cookies,再用get_articleInfo.py获取文章链接。在使用的时候发现,这个网页也有反爬的机制,出现错误之后就等几个小时再继续。
  和参考的文章中不一样的地方在于,我用的是Edge浏览器,然后在获取文章链接的同时还获取了文章的发布时间。具体的参数需要参考原文。

# -!- coding: utf-8 -!-
# login.py 用于保存微信帐号登录信息
# 以下代码中的微信登录帐号密码需要修改
from selenium import webdriver
import time
import json
driver = webdriver.Edge()
driver.get("https://mp.weixin.qq.com/") # 微信公众平台网址
driver.find_element_by_link_text("使用帐号登录").click() # 切换到用帐号密码登录
driver.find_element_by_name("account").clear()
driver.find_element_by_name("account").send_keys("帐号")  # 自己的微信公众号
time.sleep(2)
driver.find_element_by_name("password").clear()
driver.find_element_by_name("password").send_keys("密码")  # 自己的微信公众号密码
driver.find_element_by_class_name("icon_checkbox").click()
time.sleep(2)
driver.find_element_by_class_name("btn_login").click()
time.sleep(15)
#此时会弹出扫码页面,需要微信扫码
cookies = driver.get_cookies()  # 获取登录后的cookies
print(cookies)
cookie = {}
for items in cookies:cookie[items.get("name")] = items.get("value")
# 将cookies写入到本地文件,供以后程序访问公众号时携带作为身份识别用
with open('cookies.txt', "w") as file:#  写入转成字符串的字典file.write(json.dumps(cookie))
# -*- coding:utf-8 -*-
# get_article_link.py
# 参考第一篇文章链接,需要对一些参数进行修改
# 在参考文章的基础上,增加了文章发布时间的条目
import requests
import json
import re
import timewith open("cookies.txt", "r") as file:cookie = file.read()
cookies = json.loads(cookie)
url = "https://mp.weixin.qq.com"response = requests.get(url, cookies=cookies)
print(response.url)
token = re.findall(r'token=(\d+)', str(response.url))[0]  # 从url中获取tokenheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50", # 需要根据需求修改"Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=0&token="+token+"&lang=zh_CN", # 需要根据需求修改"Host": "mp.weixin.qq.com",
}
with open('article_link.txt', "w", encoding='utf-8') as file:for j in range(1, 53, 1): # 循环次数根据实际情况进行设置begin = (j-1)*5requestUrl = "https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin="+str(begin)+"&count=5&fakeid=MzU4MjY2OTY2NQ==&type=9&query=&token="+token+"&lang=zh_CN&f=json&ajax=1"search_response = requests.get(requestUrl, cookies=cookies, headers=headers)re_text = search_response.json()list = re_text.get("app_msg_list")for i in list:timestr = i["create_time"]timeArray = time.localtime(int(timestr))otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray) # 文章发布时间file.write(i["aid"]+"<=====>"+i["title"]+"<=====>"+i["link"] + "<=====>" + otherStyleTime + "\n")print(i["aid"]+"<=====>"+i["title"]+"<=====>"+i["link"] + "<=====>" + otherStyleTime)time.sleep(20)

  获得的文本文件,可以导入Excel做成表格。在Excel中选择从文本导入数据,分隔符设置为“<=====><=====><=====>”。我在导入的时候遇到了一点问题,就有些地方它不识别这个分割符号。我就把这个“<=====>”“<=====>”“<=====>”,在文本文件中全部替换成分号,再用Excel导入就没问题了。

获取文章信息

  获取文章信息是参考第二和第三篇文章做的。想要获取微信公众号文章的阅读量、点赞等信息,在浏览器中打开微信公众号文章是没有用的。只有通过微信打开才能拿到这些信息。所以在第三篇文章中,原作者就搞了一个自动控制微信的脚本,在文件传输助手中点击文章链接来产生带cookie和appmsg_token的包。但如果文章数量比较少,其实可以手动点。经过测试,每次获得的cookie和appmsg_token至少可以用来获取100篇文章的信息。

# -*- coding:utf-8 -*-
# write_cookies.py
import urllib
import sys
from mitmproxy import ctx
from mitmproxy import io, http
# command: mitmdump -s write_cookies.py -w dat mp.weixin.qq.com/mp/getappmsgextclass WriterCookie:"""mitmproxy的监听脚本,写入cookie和url到文件"""def __init__(self,outfile: str) -> None:self.f = open(outfile, "w")def response(self, flow: http.HTTPFlow) -> None:"""完整的response响应:param flow: flow实例,"""# 获取urlurl = urllib.parse.unquote(flow.request.url)# 将url和cookie写入文件if "mp.weixin.qq.com/mp/getappmsgext" in url:self.f.write(url + '\n')self.f.write(str(flow.request.cookies))self.f.close()# 退出exit()# 第四个命令中的参数
addons = [WriterCookie(sys.argv[4])]

  write_cookies.py是mitmproxy的监听脚本,可以从下面的命令看出来,当它监听到“mp.weixin.qq.com/mp/getappmsgext”这种请求包时,就把请求包的内容保存下来。这种请求就是每次微信打开公众号文章是发出的请求包。

"mitmdump -s {}/write_cookies.py -w {} mp.weixin.qq.com/mp/getappmsgext".format('./cookie.txt')
# -*- coding:utf-8 -*-
# get_Info.py
import re
import os
import threading
from wechatarticles import ArticlesInfo
import timeclass ReadCookie(object):"""启动write_cookie.py 和 解析cookie文件,"""def __init__(self,outfile):self.outfile = outfileprint(self.outfile)def parse_cookie(self):"""解析cookie:return: appmsg_token, biz, cookie_str·"""with open(self.outfile) as f:data = f.read()appmsg_token_string = re.findall("appmsg_token.+?&", data)[0].split('=')[1]cookies = re.findall(r"\['(.*?)'\]", data)Wechat_cookies = {}for cookie in cookies:cookie = cookie.split("', '")Wechat_cookies[cookie[0]] = cookie[1]return appmsg_token_string,Wechat_cookiesdef write_cookie(self):"""启动 write_cookies。py:return:"""#当前文件路径path = os.path.split(os.path.realpath(__file__))[0]#path = os.getcwd()print(path)# mitmdump -s 执行脚本 -w 保存到文件 本命令command = "mitmdump -s {}/write_cookies.py -w {} mp.weixin.qq.com/mp/getappmsgext".format(path,self.outfile)os.system(command)def get_cookie():rc = ReadCookie('cookie.txt')rc.write_cookie()appmsg_token_string, cookies = rc.parse_cookie()return appmsg_token_string, cookiesfp_src = open('links.txt', 'r')
fp_dst = open('articleInfo.txt', 'w')count = 0
while True:# 登录微信PC端获取文章信息appmsg_token, cookies = get_cookie()# print(appmsg_token_string)cookie = ''for ck in cookies.items():if not cookie:cookie = cookie + ck[0] + '=' + ck[1]else:cookie = cookie + '; ' + ck[0] + '=' + ck[1]print(cookie)for i in range(100):url = fp_src.readline()if not url:breakarticle_url = urltest = ArticlesInfo(appmsg_token, cookie)read_num, like_num, old_like_num = test.read_like_nums(article_url)count = count + 1print(str(count) + " read_like_num:", read_num, like_num, old_like_num)fp_dst.write(str(read_num) + ';' + str(like_num) + ';' + str(old_like_num) + '\n')time.sleep(3)

  对监听到的包解析之后就可以获取我们需要的cookie和appmsg_token,然后那这个去获取微信公众号的文章信息,重复100次后,再去更新cookie和appmsg_token。在此之前,我已经事先把所有文章的链接都存到了一个文本文件“links.txt”中,每次都从里面读一行就是一个文章链接。

  然后每到100条记录之后,我就手动点这个文件传输窗口中的链接,就是每次命令行提示下面的信息的时候,我就点一下上面文件传输助手中的链接来更新cookie和appmsg_token。

Proxy server listening at http://*:8080

微信公众号文章信息(阅读量、在看、点赞数)获取相关推荐

  1. 【分享】如何用Pytho抓取微信公众号文章(包括阅读数,点赞数)

    本小白的第一篇技术分享博客,啊哈哈!!(石乐志) 真好,直接切入正题吧,目前来讲微信公众号文章主要有以下三种渠道可以获取,对应有三种抓取方式,如下~~ 搜狗微信点击跳入,这算是对咱reptiler最友 ...

  2. python爬虫抓取微信公众号文章(含全文图以及点赞数、在看数、阅读数)

    因工作需要写了一个微信公众号文章的爬虫程序,贴一下分享给需要的朋友. 首先是抓取文章的url链接,在反复研究之后找到的一个最简单的方法,不需要抓包工具.首先需要自己注册一个微信公众号,有微信即可绑定注 ...

  3. 快速提高微信公众号文章的阅读量的必备神器——阅读红包!

    辛辛苦苦写了一篇文章,群发之后寥寥无几的阅读量让人心灰意冷~~~ 明明粉丝有好几万,群发之后只有几百的阅读量,让人怀疑人生~~~ 很多时候,我们真的愿意给阅读我们文章的用户发个微信红包以表感激...对 ...

  4. 如何获取微信公众号文章的阅读量和点赞数

    微信采集的重点就是微信公众号相关的数据.主要是发布的文章.其他的话还有点赞阅读以及公众号的账号信息等.下面会大家一一说明如何采集.以及采集的一些限制. 首先是数据来源.主要分为两大块.客户端采集和搜狗 ...

  5. PHP阅读文章送积分规则代码,php实现微信公众号文章付费阅读功能的代码分享

    关于php实现微信公众号文章付费阅读功能,就是一片公众号文章,点进去显示标题,作者,时间,公众号名称和部分内容,要想阅读所有内容,那就支付0.01元就可以阅读所有的内容,这就是付费阅读!!!当然金额可 ...

  6. php实现微信公众号文章付费阅读功能的代码分享

    关于php实现微信公众号文章付费阅读功能,就是一片公众号文章,点进去显示标题,作者,时间,公众号名称和部分内容,要想阅读所有内容,那就支付0.01元就可以阅读所有的内容,这就是付费阅读!!!当然金额可 ...

  7. 【Python爬虫】爬取微信公众号文章信息准备工作

    有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来.参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一 ...

  8. 十大绝招快速提高微信公众号图文消息阅读量

    前言 微信公众号图文消息的打开率.阅读量,常常是微信公众平台运营者最关心的问题,精心做的图文群发出去了,打开率却很少,不免有些受挫.对于只考流量主收入的朋友,更是苦恼不已.而大圣( vdashengv ...

  9. java 微信文章评论点赞_使用fiddler抓取微信公众号文章的阅读数、点赞数、评论数...

    1 设置fiddler支持https 打开fiddler,在菜单栏中依次选择 [Tools]->[Options]->[HTTPS],勾上如下图的选项: 单击Actions,选择Expor ...

最新文章

  1. linux7.4 配置yum,Centos7.4重装yum
  2. 网站优化时不容错过的时期有哪几个?
  3. Spring事务与自定义多线程陷阱
  4. 第五章 运输层(UDP和TCP三次握手,四次挥手分析)
  5. html5 json转字符串,web前端-js小记(5)-字符串及json
  6. mysql事务变量_mysql学习四之事务、变量、触发器、函数、存储过程
  7. 利用Date类计算生活时间
  8. 学习笔记4 :opencv 、PIL、matplotlib.image打开、保存图片
  9. python程序员怎么建议_资深程序员对Python新手的八个建议,超级实用!
  10. Windows提高_2.2第二部分:用户区同步
  11. 算法:回溯八 Combinations指定个数组合
  12. opencv2.4.9 + vc2012配置过程记录
  13. CH341ser(usb转串口)驱动
  14. flash插件android 6.0.1,flash player 10.1
  15. 一种经典的客户关系管理系统(CRM)订单模型的设计与实现
  16. 安装VMware Workstation 16.1
  17. java手机一款三国游戏_JAVA热游—富甲三国之雄霸天下原创心得
  18. 3D音频再现理论研究(一)---3D音频技术历史介绍(转)
  19. 【俗话编程】什么是对象?
  20. 【进制】计算机底层是如何计算2+3的?

热门文章

  1. python 求3位数的水仙花数_python 求3到8位数的水仙花数Pycharm实现
  2. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.20)-- ANA
  3. 高一计算机函数公式,求高一数学函数所有公式
  4. HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)
  5. 设计模式之设配器模式、外观模式
  6. 在ros中使用glog
  7. 信息系统安全等级保护(简称“等保”)
  8. OpenCV (c++)使用KDTree时,得到正确结果后报Segmentation fault (core dumped)
  9. windows server2012R2 apache+mod_wsgi+django
  10. 三年级计算机活动记录,小学三年级主题班会活动记录