简介: 这篇文章主要教大家怎么获取一些电脑无法访问的微信公众号数据,干货满满,30分钟包学会。
ps. 开始之前,我们先做个实验,大家把下面这个链接用电脑中的浏览器打开:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU4MTIzNTE2Mw==&scene=124#wechat_redirect
理论上结果是,如图:
下面同样把链接复制到手机微信中打开,你会发现可以访问,如图:
怎么回事? 那我们怎么爬?手机上写程序吗?赶紧开始,不浪费时间了…
> Fiddler安装
1 我们虽然电脑不能直接访问该微信公众号,但我们可以通过电脑设置手机代理来访问,具体的步骤大家请参考这里。(由于我觉得这里写的很详细,就不自己单独写一份了)
2 如果第一步成功了,我们再次用手机微信访问上面提到的那个神奇的链接,这时候再查看Fiddler
,我们应该可以找到下图所示的内容:
入口地址的Header信息如下:
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 我们已经找到了入口地址,但是你会发现,就这个公众号而言,我们还可以下拉刷新的,行,刷新后观察Fiddler
的变化,如下图:
Header信息如下:
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
,分析两次访问的参数的异同,所以参数可能和读者不太一样:
第一次访问的
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
第二次访问的
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_WzQEBfwN9QQRZWd2GjBb44hpWWHBGAIx4wOHAA~~
&x5=0
&f=json
url
直接访问是不会给数据的,因为header
中还有其他信息,我们单纯就看其中一些参数知道大概的意思就行,后面我们再用代码去测试。__biz : 这个似乎没变,不管他
f: 数据格式为json
offset: 数据偏移量为16,可以认为是从哪条数据开始
count: 每一页的数量为10
pass_ticket: 一个加密参数,这个先别管,大家多访问几次就发现不太一样
appmsg_token:也是一个加密参数,先别管
其他的参数似乎都不怎么变动,到时候就带着一起访问吧。
html
中。下拉刷新时,后面的数据就是通过接口来获取,其中一些加密参数怎么来的,这个比较难,暂时教程中就带着这几个加密参数一起走就是,这里不细说。# -*- 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使用