网络爬虫实战之微信公众号数据接口分析(组图)

优采云 发布时间: 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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线