Python爬蟲:抓取手機APP的數據
點擊上方「
Python開發
」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
摘要
大多數APP裡面返回的是json格式數據,或者一堆加密過的數據 。這裡以超級課程表APP為例,抓取超級課程表裡用戶發的話題。
1
抓取APP數據包
方法詳細可以參考這篇博文:
http://my.oschina.net/jhao104/blog/605963
得到超級課程表登錄的地址:
http://120.55.151.61/V2/StudentSkip/loginCheckV4.action
表單:
表單中包括了用戶名和密碼,當然都是加密過了的,還有一個設備信息,直接post過去就是。
另外必須加header,一開始我沒有加header得到的是登錄錯誤,所以要帶上header信息。
2
登錄
登錄代碼:
import from import "http://120.55.151.61/V2/StudentSkip/loginCheckV4.action" "Content-Type" "application/x-www-form-urlencoded; charset=UTF-8" "User-Agent"
:
"Dalvik/1.6.0 (Linux; U; Android 4.1.1; M040 Build/JRO03H)"
,"Host"
:"120.55.151.61"
,"Connection"
:"Keep-Alive"
,"Accept-Encoding"
:"gzip"
,"Content-Length"
:"207"
, } loginData ="phoneBrand=Meizu&platform=1&deviceCode=868033014919494&account=FCF030E1F2F6341C1C93BE5BBC422A3D&phoneVersion=16&password=A55B48BB75C79200379D82A18C5F47D6&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&"
cookieJar = CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) req = urllib2.Request(loginUrl, loginData, headers) loginResult = opener.open(req).read()
登錄成功 會返回一串賬號信息的json數據
和抓包時返回數據一樣,證明登錄成功
3
抓取數據
用同樣方法得到話題的url和post參數
做法就和模擬登錄網站一樣。詳見:
http://my.oschina.net/jhao104/blog/547311
下見最終代碼,有主頁獲取和下拉載入更新。可以無限載入話題內容。
#!/usr/local/bin/python2.7 # -*- coding: utf8 -*- """ 超級課程表話題抓取 """ import from import import """ 讀Json數據 """ def fetch_data (json_data)
"data"
] timestampLong = data["timestampLong"
] messageBO = data["messageBOs"
] topicList = []for
eachin
messageBO: topicDict = {}if
each.get("content"
,False
): topicDict["content"
] = each["content"
] topicDict["schoolName"
] = each["schoolName"
] topicDict["messageId"
] = each["messageId"
] topicDict["gender"
] = each["studentBO"
]["gender"
] topicDict["time"
] = each["issueTime"
]"schoolName"
],each["content"
] topicList.append(topicDict)return
timestampLong, topicList""" 載入更多 """
def
load
(timestamp, headers, url)
: headers["Content-Length"
] ="159"
loadData ="timestamp=%s&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&"
% timestamp req = urllib2.Request(url, loadData, headers) loadResult = opener.open(req).read() loginStatus = json.loads(loadResult).get("status"
,False
)if
loginStatus ==1
:"load successful!"
timestamp, topicList = fetch_data(json.loads(loadResult)) load(timestamp, headers, url)else
:"load fail"
return
False
loginUrl ="http://120.55.151.61/V2/StudentSkip/loginCheckV4.action"
topicUrl ="http://120.55.151.61/V2/Treehole/Message/getMessageByTopicIdV3.action"
headers = {"Content-Type"
:"application/x-www-form-urlencoded; charset=UTF-8"
,"User-Agent"
:"Dalvik/1.6.0 (Linux; U; Android 4.1.1; M040 Build/JRO03H)"
,"Host"
:"120.55.151.61"
,"Connection"
:"Keep-Alive"
,"Accept-Encoding"
:"gzip"
,"Content-Length"
:"207"
, }""" ---登錄部分--- """
loginData =
"phoneBrand=Meizu&platform=1&deviceCode=868033014919494&account=FCF030E1F2F6341C1C93BE5BBC422A3D&phoneVersion=16&password=A55B48BB75C79200379D82A18C5F47D6&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&"
cookieJar = CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) req = urllib2.Request(loginUrl, loginData, headers) loginResult = opener.open(req).read() loginStatus = json.loads(loginResult).get(
"data"
,False
)if
loginResult:"login successful!"
else
:"login fail"
""" ---獲取話題--- """
topicData =
"timestamp=0&phoneBrand=Meizu&platform=1&genderType=-1&topicId=19&phoneVersion=16&selectType=3&channel=MXMarket&phoneModel=M040&versionNumber=7.2.1&"
headers[
"Content-Length"
] ="147"
topicRequest = urllib2.Request(topicUrl, topicData, headers) topicHtml = opener.open(topicRequest).read() topicJson = json.loads(topicHtml) topicStatus = topicJson.get(
"status"
,False
)if
topicStatus ==1
:"fetch topic success!"
timestamp, topicList = fetch_data(topicJson) load(timestamp, headers, topicUrl)結果:
來自:j_hao104的個人頁面
鏈接:https://my.oschina.net/jhao104/blog/606922
※一位程序媛眼中的程序員
※不小心刪除了資料庫,是什麼樣的體驗 ?
※PyPy打算推出無 GIL 版本,或和默認版本分開發行
※Python面向對象(初級篇)
※高逼格程序員指南
TAG:Python開發 |
※Pyhton爬蟲實戰-抓取BOSS直聘職位描述和數據清洗
※Selenium及Headless Chrome抓取動態HTML頁面
※Facebook從Android手機上抓取了多年的簡訊數據
※手把手教你用Python進行Web抓取
※黑客神器BuckHacker:可抓取AWS敏感數據的搜索引擎
※抓取了Gabbana 最近的 Instagram 推文:號真被盜了嗎?
※使用Python進行網頁抓取的介紹
※Windows窗體數據抓取詳解
※Python爬蟲抓取純靜態網站及其資源
※Python 爬蟲抓取純靜態網站及其資源
※Python爬蟲抓取某院網站MM照片,15分鐘教你爬取心目中的女神!
※谷歌大腦等提出使用off-policy演算法的機器人抓取任務基準
※Windows 密碼抓取方式總結
※Python爬蟲0基礎入門,快速抓取大規模數據!建議收藏!
※python編程學習之面向函數初接觸!這次我們來抓取QQgame信息吧!
※超級速度抓取器!Blackmore 的多普勒激光雷達是屠龍刀嗎?
※抓取豆瓣音樂Top 250數據存到Excel中
※隱私話題:討論Facebook如何抓取用戶隱私
※蘋果推ARKit3、《我的世界AR》支持真人抓取、全身動捕
※猶他州空氣質量分析-從EPA的空氣質量服務站API中抓取數據