汇总:基于Python采集爬取微信公众号历史数据

优采云 发布时间: 2022-11-02 12:25

  汇总:基于Python采集爬取微信公众号历史数据

  在

  本文,昆之鹏的技术人员将介绍一种通过模拟微信App的操作来采集指定公众号所有历史数据的方法。

  通过我们的抓包分析,我们发现微信公众号的历史数据是通过HTTP协议加载的,对应的API接口如下图所示,有四个关键参数(__biz、appmsg_token、pass_ticket和COOKIE)。

  为了能够得到这四个参数,我们需要模拟操作应用,让它生成这些参数,然后我们捕获数据包来获取它。对于模拟 App 操作,我们之前介绍了通过 Python 模拟 Android App 的方法(详见)。对于 HTTP 集成数据包捕获,我们之前介绍了 Mitmproxy (有关详细信息,请参阅)。

  我们

  需要模拟微信的操作才能完成以下步骤:

  1. 启动微信应用

  2. 点击“联系人”

  3. 点击“公众号”

  4)点击采集的公众号后

  5. 点击右上角的用户图片图标

  6. 点击“所有消息”

  

  在这一点上,我们可以从#63开始;action=home 的答案数据捕获了三个关键参数,__biz、appmsg_token和pass_ticket,以及请求标头中的 cookie 值。如下图所示。

  有了以上四个参数,我们可以构造一个 API 请求来获取历史文章列表,并通过调用 API 接口直接获取数据(无需模拟 App 操作)。核心参数如下,通过更改偏移参数,可以得到所有的历史数据。

  

# COOKIE

headers = {'COOKIE': 'rewardsn=; wxtokenkey=777; wxuin=584068438; devicetype=android-19; version=26060736; lang=zh_CN; pass_ticket=Rr8cO5c2******3tKGqe7aVZzV9TupvrK+1uHHmHYQGL2WFdKIE; wap_sid2=COKhxu4KElxckFZQ3QzTHU4WThEUk0zcWdrZjhGcUdYdEVSV3Y1X2NPWHNUakRrd1ZzMnpLTERpdE5rbmxjSTg******dlRBcUNRazZpOGxTZUVEQUTgNQJVO'}

url = 'https://mp.weixin.qq.com/mp/profile_ext?'

data = {}

data['is_ok'] = '1'

data['count'] = '10'

data['wxtoken'] = ''

data['f'] = 'json'

data['scene'] = '124'

<p>

data['uin'] = '777'

data['key'] = '777'

data['offset'] = '0'

data['action'] = 'getmsg'

data['x5'] = '0'

# 下面三个参数需要替换

# https://mp.weixin.qq.com/mp/profile_ext&#63;action=home应答数据里会暴漏这三个参数

data['__biz'] = 'MjM5MzQyOTM1OQ=='

data['appmsg_token'] = '993_V8%2BEmfVD7g%2FvMZ****4DNUJNFkg~~'

data['pass_ticket'] = 'Rr8cO5c23ZngeQHRGy8E7gv*****pvrK+1uHHmHYQGL2WFdKIE'

url = url + urllib.urlencode(data)</p>

  以微信公众号“数字工厂”为例,采集流程操作截图如下图所示:

  输出的屏幕截图如下所示:

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

  解决方案:VBA一键提取广东省工资系统《个人信息采集表》A3版本

  前两天发了一个A4版的摘录

  因为A4版的内容是

  (1)前5行内容一致

  (2)5行之后,根据个人有不同的内容

  于是我用了九N二H的幂,根据不同的内容做出不同的判断,将不同的内容提取到不同的单元格中。(你看表达这么麻烦,设计一定不简单)

  【解决了】

  我今天下载了一个A3版本,

  简单就是完美

  发现A3版的内容都是固定单元格。

  (1)我们只要找到要提取的内容的单元格(彩色),放在第一行,如下图

  然后将第一行的内容读入数组,就可以得到总的列数

  (2)读取文件总数得到总行数,Redim一个数组(总行数,总列数)

  (3)运行程序,循环自动逐个打开Excel文件,将第一行指定的单元格读取到汇总表中

  您可以轻松完成数据提取。大约 3K 文件在 400 多秒内被提取出来。完美的,

  【代码】

  Sub yhd一键提取广东省工资系统个人信息A3版本()

Dim mysht As Worksheet

Dim fold As String, file, data_arr()

Dim myobj As Object

Dim file_num

<p>

file_num = 0

Set mysht = Sheets("提取A3")

fold = SelectGetFolder

If fold = "没有选择" Then Exit Sub

arr = GetPathAllFile(fold)

Call AppEx(False)

ti = Timer()

With mysht

.Range("a5").Resize(5000, 200).ClearContents

xl_c = .Range("A1").End(xlToRight).Column

ReDim data_arr(UBound(arr) - 1, xl_c - 1)

start_arr = .Range("A1").Resize(2, xl_c)

Debug.Print UBound(start_arr, 2), UBound(data_arr, 1) & "--" & UBound(data_arr, 2)

End With

For Each rr In arr

Set myobj = GetObject(rr)

With myobj

With .Sheets("Sheet1")

For i = 1 To xl_c

data_arr(file_num, i - 1) = .Range(start_arr(1, i))

  

Next i

End With

.Close False

End With

file_num = file_num + 1

Set myobj = Nothing

Next

With mysht.Range("a5").Resize(UBound(data_arr, 1) + 1, UBound(data_arr, 2) + 1)

.NumberFormatLocal = "@"

.Value = data_arr &#x27;Application.Transpose(arr)

.ShrinkToFit = True

End With

Call AppEx(True)

MsgBox "完成!用时" & Format(Timer - ti, "0000.00秒")

End Sub

</p>

  复制

  代码在这里供自己和有用的人学习和使用,如果您有任何问题,可以问我

  【影响】

  你们的喜欢和欣赏是我前进的动力。

  感激的!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线