python3編寫網絡爬蟲19-app爬取

1、app爬取html

前面都是介紹爬取Web網頁的內容,隨着移動互聯網的發展,愈來愈多的企業並無提供Web頁面端的服務,
而是直接開發了App,更多信息都是經過App展現的python

App爬取相比Web端更加容易 反爬蟲能力沒有那麼強,並且數據大多數是以JSON形式傳遞的 解析更加簡單git

在Web端 咱們能夠經過瀏覽器開發者工具 監聽到各個網絡請求和響應過程 在App端 查看內容就須要抓包軟件
例如 WireShark Fiddler Charles mitmproxy AnyProxy等 它們原理基本相同github

能夠經過設置代理的方式將手機處於抓包軟件的監聽下 就能夠看到App運行過程當中發生的全部請求和響應
至關於分析Ajax同樣web

若是參數程序是有規律的 直接用程序模擬爬取便可
若是沒有規律 能夠經過mitmdump 對接Python腳本 處理response api

若是須要自動化 可使用Appium瀏覽器

1.charles的使用服務器

簡介 : 是一個網絡抓包工具 能夠用它來作app抓包分析 相似Web瀏覽器的開發者工具微信

安裝 官網:cookie

https://www.charlesproxy.com

 

下載地址 :

 https://www.charlesproxy.com/dowload

 

默認安裝便可

charles 是收費軟件 免費試用30天

證書配置

如今不少頁面都在向HTTPS方向發展 HTTPS通訊協議應用愈來愈普遍 若是一個App通訊應用了HTTPS協議
那麼它的通訊數據都會被加密 常規的截包方法沒法識別內部數據

須要配置SSL證書

Charles是運行在PC端的 抓取的是App端的數據 因此PC和移動端都要安裝證書


PC端安裝證書

打開charles 點擊Help -> SSL Proxying -> Install Charles Root Certificate 進入安裝證書的頁面

 

點擊安裝證書 點擊下一步 選擇將全部證書放入下列存儲 點擊瀏覽 選擇存儲位置爲 受信任的根證書頒發機構 點擊肯定

若是報錯 存儲已滿 或者只讀 解決辦法

win+R 輸入mmc 點擊文件 添加刪除管理單元
點擊證書 點擊添加 選擇計算機帳戶 下一步 肯定

從新導入證書


移動端安裝證書


首先保證手機和電腦在同一局域網 (有網線的狀況下) 手機設置選擇wifi 手動代理 添加charles的ip和端口
設置完電腦會彈出是否信任此設備 點擊allow便可

手機瀏覽器(儘可能不要用默認的瀏覽器 可使用QQ瀏覽器)打開chls.pro/ssl 給證書添加個名字 點擊肯定就能完成證書的安裝

手機訪問互聯網 數據包會流經charles charles再轉發數據包到真實服務器 服務器在返回數據包 流經charles
在轉發給手機

設置好charles而且配置好證書

示例 打開京東 選一個商品 打開商品評論頁面 不斷下拉加載評論

左側會有一個api.m.jd.com 點擊其中一條 切換到contents選項卡 能夠看到JSON數據 覈對結果 和app上看到的內容一致
這樣就捕獲到了在上拉刷新的請求和響應內容

重發 charles另外一個強大功能能夠將捕獲的請求加以修改並從新發送

能夠用來作調試

 

 


2.mitmproxy的使用

是一個支持HTTP和HTTPS的抓包程序相似Fiddler charles 只不過是一個控制檯形式操做

mitmproxy還有兩個相關組件 mitmdump 命令行接口 利用它能夠對接python腳本
另外一個是mitmweb 一個web程序 經過它能夠清楚觀察捕獲的請求

安裝

下載地址:

https://github.com/mitmproxy/mitmproxy/releases

 

默認安裝便可

證書配置

啓動mitmdump 找到mitmproxy文件下ca證書 雙擊mitmproxy-ca.pl2 默認下一步便可
選擇將全部證書放入下列存儲 點擊瀏覽 選擇存儲位置爲 受信任的根證書頒發機構 點擊肯定

 

 

手機 將文件發送到手機 點擊安裝

經過 手機微信助手 發送 mitmproxy-ca-cert.cer 手機點擊wifi 高級設置 安裝證書 默認download 返回上一級 內部存儲空間

tencent -> MicroMsg -> Download 點擊安裝

 

運行 mitmdump 是mitmproxy的命令行接口 同時能夠對接python腳本

示例:

可使用命令啓動mitmproxy 例如 mitmdump -w outfile 截獲的數據都會被保存到此文件中

指定腳原本處理截獲的數據 使用-s參數

mitmdump -s test.py

腳本文件內容以下

def request(flow):
flow.request.headers['User-Agent'] = 'MitmProxy'
print(flow.request.headers)

 

這裏 定義一個request() 方法 參數爲flow 經過request屬性獲取當前請求對象 打印輸出請求的請求頭
將User-Agent修改爲了MitmProxy

手機端訪問 http://httpbin.org/get

 

日誌輸出

mitmdump 提供了專門的日誌傳輸系統 能夠設定不一樣顏色輸出結果 修改腳本以下:

確保安裝好mitmproxy pip install mitmproxy

 

from mitmproxy import ctx

def request(flow):
flow.request.headers['User-Agent'] = "MitmProxy"
ctx.log.info(str(flow.request.headers))#輸出白色
ctx.log.warn(str(flow.request.headers))#輸出黃色
ctx.log.error(str(flow.request.headers))#輸出紅色

 

 


request

示例

from mitmproxy import ctx

def request(flow):
  request = flow.request
  info = ctx.log.info
  info(request.url)
  info(str(request.headers))
  info(str(request.cookies))
  info(request.host)
  info(request.method)
  info(str(request.post))
  info(request.scheme)

 

修改腳本 手機打開百度 分別輸出 請求連接 請求頭 cookies host 請求方法 端口 協議

 

同時還能夠對任意屬性進行修改 就像最初修改Headers同樣 直接賦值

示例:

def request(flow):
  url = 'https://httpbin.org/get'
  flow.request.url = url

 

更多屬性參考 http://docs.mitmproxy.org/en/latest/scripting/api.html

 

響應

response() 方法

示例:

from mitmproxy import ctx

def response(flow):
  response = flow.response
  info = ctx.log.info
  info(str(response.status_code))
  info(str(response.headers))
  info(str(response.cookies))
  info(str(response.text))

 

打印出響應狀態碼 headers cookies 網頁源代碼等

相關文章
相關標籤/搜索