當前位置:
首頁 > 知識 > Python爬蟲:抓取手機APP的數據

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

urllib2  

from

cookielib

import

CookieJar   loginUrl =

"http://120.55.151.61/V2/StudentSkip/loginCheckV4.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()  

print

loginResult

登錄成功 會返回一串賬號信息的json數據







和抓包時返回數據一樣,證明登錄成功




3

抓取數據




    用同樣方法得到話題的url和post參數


  


  做法就和模擬登錄網站一樣。詳見:

http://my.oschina.net/jhao104/blog/547311


    下見最終代碼,有主頁獲取和下拉載入更新。可以無限載入話題內容。


#!/usr/local/bin/python2.7   # -*- coding: utf8 -*-  

"""     超級課程表話題抓取   """

 

import

urllib2  

from

cookielib

import

CookieJar  

import

json  

""" 讀Json數據 """

 

def

fetch_data

(json_data)

:

      data = json_data[

"data"

]       timestampLong = data[

"timestampLong"

]       messageBO = data[

"messageBOs"

]       topicList = []       

for

each

in

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"

]               

print

each[

"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

:           

print

"load successful!"

          timestamp, topicList = fetch_data(json.loads(loadResult))           load(timestamp, headers, url)       

else

:           

print

"load fail"

          

print

loadResult           

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:       

print

"login successful!"

 

else

:       

print

"login fail"

      

print

loginResult  

""" ---獲取話題--- """

 
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

)  

print

topicJson  

if

topicStatus ==

1

:       

print

"fetch topic success!"

      timestamp, topicList = fetch_data(topicJson)       load(timestamp, headers, topicUrl)

結果:








  • 來自:j_hao104的個人頁面



  • 鏈接:https://my.oschina.net/jhao104/blog/606922



喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

一位程序媛眼中的程序員
不小心刪除了資料庫,是什麼樣的體驗 ?
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中抓取數據