1. 程式人生 > >30分鐘學會微信公眾號的資料抓取

30分鐘學會微信公眾號的資料抓取

網路爬蟲實戰之微信公眾號

簡介: 這篇文章主要教大家怎麼獲取一些電腦無法訪問的微信公眾號資料,乾貨滿滿,30分鐘包學會。

實戰

環境

  • 作業系統: win10
  • python版本: 2.7.3

安裝

  • 抓包工具有很多,這裡我使用的是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應該都已經過期了,哈哈

相關資料

相關推薦

30分鐘學會公眾資料

網路爬蟲實戰之微信公眾號 簡介: 這篇文章主要教大家怎麼獲取一些電腦無法訪問的微信公眾號資料,乾貨滿滿,30分鐘包學會。 實戰 環境 作業系統: win10 python版本: 2.7.3 安裝 抓包工具有很多,

文章公眾文章常識之臨時連結、永久連結

未經允許請勿轉載 曾經嘗試過抓取微信文章的小夥伴,一定很熟悉搜狗微信。搜狗微信是騰訊官方提供的搜尋引擎,專門用來搜尋微信公眾號發表的文章(不包含服務號)。 對於想要獲取微信文章進行研究學習的小夥伴,首先探索的途徑通常是搜狗微信。那麼關於搜狗微信以及微信相關的抓取,需

關於公眾文章

今天公司要我抓取微信公眾號文章,我百度了半天得到的方法有三種: 具體內容我就不復制了請去下面這個連結去看,寫的挺好 微信公眾號文章採集方案 在三者中我選擇了比較穩妥的第二種:對手機微信進行中間人攻擊 因為之前被封過小號,所以感覺解封微信太麻煩 而關於如何中間人攻擊請參考下面的連結

搜狗公眾文章

機器能做的事就別讓人來做! 目標: 抓取特定微信公眾號文章 思路:利用selenium模擬瀏覽器行為,進行抓取(理由:搜狗已將文章連結進行處理,且頁面為動態生成) 框架:    步驟: 1、登入搜狗   a、找到登入按鈕並點選   self.browser.

使用anyproxy+安卓模擬器自動爬公眾資料-包括閱讀數和點贊數

本文並非作者原創,本文來自 zsyoung 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/zsyoung/article/details/78849982?utm_source=copy 在這裡只是把相關步驟清晰明化一下: 1.安裝node.js &n

公眾批量爬——Java版

最近需要爬取微信公眾號的文章資訊。在網上找了找發現微信公眾號爬取的難點在於公眾號文章連結在pc端是打不開的,要用微信的自帶瀏覽器(拿到微信客戶端補充的引數,才可以在其它平臺開啟),這就給爬蟲程式造成很大困擾。後來在知乎上看到了一位大牛用php寫的微信公眾號爬取程式,就直接按大佬的思路整了整搞成java的了。

charles小程式資料(http和https資料)

本文中使用的是mac上的抓包工具charles進行抓包,手機是華為榮耀8,安卓版本7.0(其實跟版本沒啥關係) 要想抓取到微信小程式的資料首先要解決的第一個問題件就是如何 通過charles抓取手機上的資料(HTTP) 具體配置過程如下: 第一步,charles上通過

基於springboot公眾開發,幾分鐘學會自動回復

ssa star 點擊 stat html asn document text cit 效果圖 1.準備工作 申請微信訂閱號(個人只能申請訂閱號,而且沒什麽功能,也無法認證),申請完畢,點擊 開發=>基本配置,如下圖: 服務器配置需要有 域名 80端口,我猜

初次接觸公眾開發,相關資料記錄

demo 公眾賬號 web set blank con js-sdk lin library 1. 自動授權模式,無需寫死AppSecret   到微信第三方開放平臺註冊賬號,申請開發者資質認證,後可使用自動授權   https://open.weixin.qq.com/c

Python爬公眾歷史文章進行資料分析

思路: 1. 安裝代理AnProxy,在手機端安裝CA證書,啟動代理,設定手機代理; 2. 獲取目標微信公眾號的__biz; 3. 進入微信公眾號的歷史頁面; 4. 使用Monkeyrunner控制滑屏;獲取更多的歷史訊息; 5. 記錄文章標題,摘要,建立時間,創作型別,地

開發】公眾後臺底部選單欄json資料加入(獲取)方式操作

首先獲取微信公號的  開發者ID(AppID)  開發者密碼(AppSecret) 登入公眾號 找到以下選項   找到獲得access_token的引數 根據引數取得access_token URL: https://a

如何走上更高平臺分享傳遞乾貨知識:(開通個人公眾:大資料躺過的坑)(圖文詳解)(博主推薦)

  不多說,直接上乾貨!    為了進一步打造提升(大資料躺過的坑)本微信公眾平臺的博文高質量水平,特邀請善於分享、主動、敢於專研嘗試新技術新領域的您,一起共同維護好我們的知識小天地。目前涉及領域有:大資料領域:Hadoop、Hive、HBase、Zookeeper、Flume、Sqoop、Ka

利用fiddler包,公眾資料

Ctrl +f5 搜尋:開始 import System; import System.Net.Http; import System.Windows.Forms; import System.Web.HttpUtility; import System.T

紅圈律所公眾圖文資料報告

Since the advent of the media such as the WeChat public account, the way of marketing by law firms

用python wxpy管理公眾,並利用獲取自己的開源資料

之前瞭解到itchat 乃至於 wxpy時 是利用tuling聊天機器人的介面。呼叫介面並儲存雙方的問答結果可以作為自己的問答詞庫的一個數據庫累計。這些資料可以用於自己訓練。 而最近希望獲取一些語音資源,用於卷積神經網路的訓練。。     首先wxpy是itchat的升級版,通

圖片資料編碼與公眾圖片

--- 標題: 圖片資料編碼與微信公眾號圖片 作者: 夢幻之心星 [email protected] 標籤: [#圖片,#資料編碼,#Base64] 目錄: [資料編碼] 日期: 2021-01-09 --- ## 背景說明 - 使用工具將圖片轉換為Bas

公眾開發筆記1(nodejs開發的)

.post err log 加密 課堂 是我 targe 分享 gty 本篇記錄了微信公眾號開發的一些筆記 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自

公眾開發

weixin 後來 方式 發送請求 菜單 ml2 發現 格式 ejs 一、微信服務器與我們服務器的交流 微信開發者擁有自己的服務器,在我們服務器上可以與微信服務器進行交流。既然可以交流,那就必定需要前提條件(微信認證),也就是說,只有自己的服務器與微信服務器進行認證通過後,

[Python爬蟲] 之十五:Selenium +phantomjs根據公眾文章

頭部 drive lac 過程 標題 操作 函數 軟件測試 init   借助搜索微信搜索引擎進行抓取   抓取過程   1、首先在搜狗的微信搜索頁面測試一下,這樣能夠讓我們的思路更加清晰        在搜索引擎上使用微信公眾號英文名進行“搜公眾號&r

公眾支付報文示例

cda 響應 xca mes amp 鏈接 返回值 col http 請求報文: 1 <xml> 2 <body><![CDATA[狄克酸奶店]]></body> 3 <callback_url&