网络爬虫实战之微信公众号数据接口分析(组图)
优采云 发布时间: 2021-07-29 19:37网络爬虫实战之微信公众号数据接口分析(组图)
真实网络爬虫的微信公众号
简介:这个文章主要教大家如何获取一些电脑无法访问的微信公众号数据。干货满满,30分钟即可学会。
ps。在开始之前,让我们做一个实验。您可以使用计算机上的浏览器打开以下链接:
理论上,结果如图:
下面复制链接到手机微信打开,就会发现可以访问了,如图:
这是怎么回事?那我们怎么爬呢?你会在手机上写程序吗?现在开始,不要浪费时间...
实际环境安装
> Fiddler 安装
数据接口分析
1 虽然我们的电脑不能直接访问,但是我们可以设置一个移动代理通过电脑来访问。具体步骤请参考这里。 (因为觉得细节都写到这里了,就不自己单独写了)
2 如果第一步成功,我们再用手机微信访问上面提到的那个,此时再查看Fiddler,应该可以找到如下图所示的内容:
入口地址的头部信息如下:
GET https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU4MTIzNTE2Mw==&scene=124&devicetype=iPhone+OS9.3.2&version=16060223&lang=zh_CN&nettype=WIFI&a8scene=1&fontScale=100&pass_ticket=HzJHDnkJb3%2B0ahfIxvOkfBNKHuHMqPSTy6BhUfH%2Fh%2FIvlm9I3TXDMu%2BLVTBJrlje&wx_header=1 HTTP/1.1
Host: mp.weixin.qq.com
Cookie: devicetype=iPhoneOS9.3.2; lang=zh_CN; pass_ticket=HzJHDnkJb3+0ahfIxvOkfBNKHuHMqPSTy6BhUfH/h/Ivlm9I3TXDMu+LVTBJrlje; rewardsn=; version=16060223; wap_sid2=CPqn++IDElwyUVRfYlQzbUgtQXhyalNJSUNZV0FtQWN6aUpZanlOTzBPbXZhTmlLY254WXpUTTA0MlIyajVNQ1lzaXd0a25NTmRxRktFNzlsYWRDdHlBTEFaSy10YThEQUFBfjDG9vTTBTgNQJVO; wxtokenkey=53c052ead40aff8e2cd6620b4318c2cd55b1fa8b11fc42bb68b0259eaff6737b; wxuin=1012847610; pgv_pvid=9292485220; tvfe_boss_uuid=fd1f6cd130701ba3
X-WECHAT-KEY: f766f1cd6ee0ff274dc9860b51eae7f688d14083adcad2ef8de83924c183947c6bd72b106319c39f3de71761aa71412f6d75e59c7819490a459ccac7c46d3473489343f4fe4cb6c7db495ff9fb9b3c11
Proxy-Connection: keep-alive
X-WECHAT-UIN: MTAxMjg0NzYxMA%3D%3D
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 MicroMessenger/6.6.2 NetType/WIFI Language/zh_CN
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
Connection: keep-alive
3 我们找到了入口地址,但是你会发现,就这个公众号而言,我们也可以下拉刷新,OK,刷新后观察Fiddler的变化,如下图:
标题信息如下:
GET https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzU4MTIzNTE2Mw==&f=json&offset=16&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=HzJHDnkJb3%2B0ahfIxvOkfBNKHuHMqPSTy6BhUfH%2Fh%2FIvlm9I3TXDMu%2BLVTBJrlje&wxtoken=&appmsg_token=943_RlSAGtRNJ4hTeFCpdMXrQE5OMWo7zlA9yV3RsQ~~&x5=0&f=json HTTP/1.1
Host: mp.weixin.qq.com
Accept-Encoding: gzip, deflate
Cookie: devicetype=iPhoneOS9.3.2; lang=zh_CN; pass_ticket=HzJHDnkJb3+0ahfIxvOkfBNKHuHMqPSTy6BhUfH/h/Ivlm9I3TXDMu+LVTBJrlje; rewardsn=; version=16060223; wap_sid2=CPqn++IDElxoZGlxSHVkbU5iUTgxdk5ERml2S0VTUFdTeFppcC1zRDNNS05qLTRvMlBhc0NWV0ZUX212UHYwQTZMQThmNUR6anFjZEh5V1FnNGtIT2NXQkhuUFhHcThEQUFBfjDE9/TTBTgNQJVO; wxtokenkey=53c052ead40aff8e2cd6620b4318c2cd55b1fa8b11fc42bb68b0259eaff6737b; wxuin=1012847610; pgv_pvid=9292485220; tvfe_boss_uuid=fd1f6cd130701ba3
Connection: keep-alive
Proxy-Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 MicroMessenger/6.6.2 NetType/WIFI Language/zh_CN
Referer: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU4MTIzNTE2Mw==&scene=124&devicetype=iPhone+OS9.3.2&version=16060223&lang=zh_CN&nettype=WIFI&a8scene=1&fontScale=100&pass_ticket=HzJHDnkJb3%2B0ahfIxvOkfBNKHuHMqPSTy6BhUfH%2Fh%2FIvlm9I3TXDMu%2BLVTBJrlje&wx_header=1
Accept-Language: zh-cn
X-Requested-With: XMLHttpRequest
我这里用上面的方法两次访问页面,截取刷新后的url,分析两次访问参数的异同,所以参数可能与读者不同:
第一次访问的网址:
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg
&__biz=MzU4MTIzNTE2Mw==
&f=json
&offset=16
&count=10
&is_ok=1
&scene=124
&uin=777
&key=777
&pass_ticket=HzJHDnkJb3%2B0ahfIxvOkfBNKHuHMqPSTy6BhUfH%2Fh%2FIvlm9I3TXDMu%2BLVTBJrlje
&wxtoken=
&appmsg_token=943_RlSAGtRNJ4hTeFCpdMXrQE5OMWo7zlA9yV3RsQ~~
&x5=0
&f=json
第二次访问的网址:
https://mp.weixin.qq.com/mp/profile_ext?action=getmsg
&__biz=MzU4MTIzNTE2Mw==
&f=json
&offset=16
&count=10
&is_ok=1
&scene=124
&uin=777
&key=777
&pass_ticket=xbJdEC6xMdTcPhBobs039uy0hsso2Ii03RqWP1a1ACmWJjQe7YaU8XVdcOeQVgDP
&wxtoken=
&appmsg_token=943_WzQEBfwN9QQRZWd2GjBb44hpWWHBGAIx4wOHAA~~
&x5=0
&f=json
__biz : 这个似乎没变,不管他
f: 数据格式为json
offset: 数据偏移量为16,可以认为是从哪条数据开始
count: 每一页的数量为10
pass_ticket: 一个加密参数,这个先别管,大家多访问几次就发现不太一样
appmsg_token:也是一个加密参数,先别管
其他的参数似乎都不怎么变动,到时候就带着一起访问吧。
编写爬虫
# -*- coding:utf8 -*-
__author__ = 'power'
import urllib2
import re
import json
# 读者自己替换url
url = "https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzU4MTIzNTE2Mw==&f=json" \
"&offset=16" \
"&count=10" \
"&is_ok=1&scene=124&uin=777&key=777&pass_ticket=xbJdEC6xMdTcPhBobs039uy0hsso2Ii03RqWP1a1ACmWJjQe7YaU8XVdcOeQVgDP&wxtoken=&appmsg_token=943_Ybr%252BNzl3hE5TUzCdt3ESYvsmavTcuwaGNKX2-w~~&x5=0&f=json"
# 设置headers,这里可以一个一个试,发现只需要Cookie和User-Agent就行了
# 记得修改Cookie和User-Agent
headers = {
# 'Accept-Encoding': 'gzip, deflate',
'Cookie': 'devicetype=iPhoneOS9.3.2; lang=zh_CN; pass_ticket=xbJdEC6xMdTcPhBobs039uy0hsso2Ii03RqWP1a1ACmWJjQe7YaU8XVdcOeQVgDP; version=16060223; wap_sid2=CPqn++IDElw2eTdjZlZqQ2tTUjhWekZwcXN2b0xTNGp1YzhuekIzWVVKenpfRElxbm9iM05oVW5rQUxzU0hxQWhKamVsdEtyalIwMVE2SFNfOWd6ZHdvWWdUVnNsSzhEQUFBfjCHyvXTBTgNQJVO; wxuin=1012847610; pgv_pvid=9292485220; tvfe_boss_uuid=fd1f6cd130701ba3',
# 'Connection': 'keep-alive',
# 'Proxy-Connection': 'keep-alive',
# 'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 MicroMessenger/6.6.2 NetType/WIFI Language/zh_CN',
# 'Referer': 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU4MTIzNTE2Mw==&scene=124&devicetype=iPhone+OS9.3.2&version=16060223&lang=zh_CN&nettype=WIFI&a8scene=1&fontScale=100&pass_ticket=xbJdEC6xMdTcPhBobs039uy0hsso2Ii03RqWP1a1ACmWJjQe7YaU8XVdcOeQVgDP&wx_header=1',
# 'Accept-Language': 'zh-cn',
# 'X-Requested-With': 'XMLHttpRequest'
}
data = None
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
# 将数据读出来
html = response.read()
# 我们下面将里面的title全部输出出来
# 数据转成字典
msg = json.loads(html)
# 从字典中读出信息列表
msg = msg["general_msg_list"]
pat_title = '"title":"(.*?)"'
# 根据正则表达式获取所有的title信息
titles = re.compile(pat_title, re.S).findall(msg)
for title in titles:
print title
ps。这里只是一段简单的爬虫代码。有兴趣的读者可以将其转化为多个页面或设置代理进行抓取。
注意事项
1 本文文章只是简单介绍了微信公众号中如何获取数据接口,以及如何破解众多加密参数,难度较大。下次有时间再给个详细的教程,这里一两个说不完。
2 安装或操作过程中如有问题请留言。
3 由于微信中设置了url的过期时间,如果本来可以访问的url突然不可用,请重新阅读。 文章里面的url应该已经过期了,哈哈
相关信息
Fiddler 设置代理
基本正则表达式
使用 urllib2