想要不開網頁也能看到資料嗎?
前置作業
- 安裝 Python3+
開始囉~
- 打開 Command Line Interface
Windows: Win + RUbuntu: Ctrl + Alt + T
2.新增一個資料夾並進入
mkdir crawler-demo && cd crawler-demo
3.安裝虛擬環境 (如果你不在意本機的環境有多髒亂可以跳過這一步)
Windows: pip install virtualenv
Ubuntu: sudo apt-get install virtualenv
把虛擬環境建置在此資料夾
virtualenv env -p python3 (這邊的 python3 對應到你平常用的 python3)
進入虛擬環境
Windows: env\Scripts\activate
Ubuntu: . env/bin/activate
4.安裝爬蟲套件
請注意你的 pip 版本 輸入 pip -V 版本是 3以上才是正確的喔
pip install requests
5.用文字編輯器打開寫程式的檔案
Windows: notepad demo.py // 你也可以用別的文字編輯器
Ubuntu: nano demo.py // 菜雞如我只會用 nano
6.開始寫程式
以下為 demo.py
檔案內容
import requests # 引入 requests 模組url = 'https://network.ntust.edu.tw/' # 台科的流量查詢網站
res = requests.get(url) # 對這個網站發送一個 GET 請求並將回傳的值指派給 res(response 的縮寫)
print(res, res.text) # 將 res 和 res.text 打印出來
儲存(記得檔案格式存成 UTF-8)後
在 CLI 執行python demo.py
這樣子你就能看到 網頁的原始碼了
res 通常會是一個 status code 200 代表成功 404 代表找不到…
res.text 則是網頁原始碼的部分
7.萃取有效資訊
首先你必須知道你要的資訊有哪些,以這個流量統計網站為例
最主要的資訊就是總流量,所以打開 網頁 > 檢查 (Chrome是 Ctrl+Shfit+I)
先選擇 Networks 然後點選 XHR 後 重新整理 確認這個網頁的運行方式
因為有的網頁是透過 javascript 再把資料塞進去
這個就沒辦法用簡單的方法把資料抓出來
這個時候看到有一個 getFlowData 的請求
先看一下 Header 再看一下 Response
發現他就是透過這個 url 去做資料的存取注入
實在是不太應該啊 正常來講應該要把這種東西包在後端才對
不過沒關係 這樣反而更好爬
接下來就是對這個 url 直接的請求
https://network.ntust.edu.tw/flowStatistics/getFlowData
在發送請求之前 要先了解他是用什麼方法送請求的
既然是 POST 那就一定會有 payload 所以往下滑
所以我們只要把這行複製下來 存到 payload 裡面用 post 請求就能拿到資料了
import requests
url = 'https://network.ntust.edu.tw/flowStatistics/getFlowData'
res = requests.post(url, data={"ip":"140.118.149.163","dt":"2018-09-03T16:00:00.000Z","units":"1"}) # 直接複製貼上
print(res.text)
最後一樣執行 python demo.py
就能看到以下結果
8.解析拿到的資料
這個的資料型態是 json 是一個在網路上很常拿來用的格式
所以 Python 也有相應的函式庫可以使用
import json
data = json.loads(res.text)
但是我們最終是要取得總流量所以要看一下他的位置在哪
發現在 items > 第一個元素 > totflow
print(data['items'][0]['totflow'])
無用的爬蟲 就是這麼的簡單