
學習動機

換句話說
想實現遊戲自動化
自學✅
生活化
?
為何是網路爬蟲
什麼是網路爬蟲
學習成果 :

每天都重複?
好無聊 !

AUTO
讓電腦自動完成日常瑣事
定義
用程式模擬人類在網路上的行為
是怎麼做的?
就像你上網找歌單
網路爬蟲
你啟動它
輸出
進入kkbox
找到資料
記下來
進入kkbox
找到資料
記下來
抓取資料GET範例
傳送資料POST範例
就像你填春遊報名表
進入表單
填寫資料
送出
網路爬蟲
你啟動它
輸出ok
進入表單
準備資料
送到伺服器
用途:
- 機器學習、監控資料、數據分析
- 從網路上擷取資料
- 向伺服器發送指令
網路爬蟲學習成果
學習成果 :
# PRESENTING CODE
requests怎麼寫
發出第一個指令:基本語法
url = "https://ckcsc.net/"
data = {"key": "example"}
response = requests.get(url)
response = requests.post(url, json=data)
requests.GET
# PRESENTING CODE
import requests
a = requests.get("https://ckcsc.net")
print(a)
賦值
使用模組
使用GET
要取得的網址
requests.GET
# PRESENTING CODE
import requests
a = requests.get("https://ckcsc.net")
print(a.text)
讓它輸出網站的整個內容
輸出【文字屬性】

輸出結果
看的出來成電社網大部分都是JavaScript動態生成

requests.POST應用
範例:遊戲外掛
自動開PaGamO的【假期模式】



requests.POST應用


事實上,只是POST到API兩個小數字而已
# PRESENTING CODE
import requests
info_url = 'https://www.pagamo.org/users/personal_information.json'
s = requests.Session()
def open_hoilday():
#登入
login_url = 'https://www.pagamo.org/api/sign_in'
login_data = {'account': "wallace999999", 'encrypted': True, 'password': "SQ3GcclkDIlmMulkfdpnUxSO1FssO0RBLPfrmFT5x2DuteYMSRr2luPaYJywYXRpLclcOckosmHWURjTYdIHMYFPTtZ3VT6WHNz+9p4hpf94NAAtKIic6tQn0uuI2B2PBGCMg88ZJ77CB8yqGumt/T5+ZbaueHHn42OWzCE1h6Xo8fSsRZnrQMXRkUwLbRojZ6FTa2yTcGMwblOia7ohULM/sDvOYXTXX8oMCSChvbUcXcpszmgegdnKj7KRmkOLuEYX3LcZjY1c34B70R8HYhBsWZnLjdxHC7f70OfcKplnWOPHpOPIy8+SMATJoBF4Eq1/jvPduaf8W4PfucXKzA=="}
print('正在登入...')
login_resp = s.post(login_url, data=login_data).json()
gc_id = login_resp['data']['gtm_info']['gc_id']
print(gc_id)
headers = { "Origin": "https://www.pagamo.org", "Referer": f"https://www.pagamo.org/map?course_code=TMGQOQS7" } # 將數據以JSON格式傳遞
# 發送POST請求
response = s.post("https://www.pagamo.org/gamecharacters/holiday_mode", json={'gc_check': gc_id, 'key': gc_id}, headers=headers)
print(response.text)
open_hoilday()
requests.POST應用
範例程式碼:
登入
POST到holiday(假期模式)
requests.POST應用
事實上,只是POST到API兩個小數字而已

✔️相同效果
生活應用✔️
遇到的困難
學習歷程 :
- 自學資源
- 錯誤解決
- 時間壓力
學習資源
學習歷程 :

GPT


加入相關社團



錯誤解決
學習歷程 :

官方文獻

時間分配
學習歷程 :

上學期時間分配
下學期時間分配
週數 | 計畫 |
---|---|
第1~2周 | 專案實作收尾 |
第3周 | 準備考幹作業 |
第4~5周 | 上台發表簡報製作 |
在生活中的應用
學習成果 :
- 學習後上台教學
-
遊戲外掛結合TG聊天機器人
考幹作業 :
學習後上台教學


簡報示例
網路爬蟲介紹
常見網路爬蟲語法
語法 | 優點 | 套件 |
---|---|---|
Python | 易學,初學者首選 | requests BeautifulSoup Selenium |
JavaScript | 模擬網頁行為,能抓取動態資料 | axios, cheerio |
Java | 穩定,適合大量處理 | Jsoup, Selenium |
C# | 整合Windows系統 | HtmlAgilityPack |
網路爬蟲三件套
直接發送請求
requests
整理接收結果
Beautifulsoup
模擬真實使用者
Selenium

爬蟲類型比較
類型 | 用途 | 特色 |
---|---|---|
requests + BeautifulSoup | 靜態網頁 | 直接抓下整個網頁 |
Selenium | 動態網頁 | 模擬人類操作,可取得包含動態數值 |
API爬蟲 | 伺服器端口 | 官方資料接口、回傳指定資料 |
後面會再解釋原理
requests寫法
pip install requests
# PRESENTING CODE
requests安裝
- Python外部函式庫
在終端機輸入 :
# PRESENTING CODE
requests第一步
引入函式庫:
import requests
# PRESENTING CODE
requests怎麼寫
發出第一個指令:基本語法
url = "https://ckcsc.net/"
data = {"key": "example"}
response = requests.get(url)
response = requests.post(url, json=data)
有兩種?
GET? POST?
# PRESENTING CODE
requests
屬性 | 用途 | 範例 |
---|---|---|
requests.get | 向伺服器【請求】資料 | 瀏覽網頁 |
request.post | 向伺服器【發送】資料 | 提交表單 |
API
- 允許不同軟體之間互相溝通和交換資料
- 讓你不需要知道內部實際結構,即可獲取資料
- 爬蟲可以透過 API 來獲取結構化資料,不用直接解析 HTML
定義
郵差
( API )
寄信者
( 使用者 )
面試官
( 伺服器 )
寄信
傳送
傳送
送回



✅填地址和郵遞區號
✅填面試官要的個資
❌知道怎麼送信
❌知道面試官怎麼審核
投面試履歷
乖乖在家就會送回來 不用懂
你只需要知道✅
- 可用的功能或服務: 另一個軟體可以請求或使用的特定操作
- 發出請求: 請求的格式、需要的資料和參數
- 接收回應: 回應的格式和包含的資料
特點
你不需要知❌
-
底層系統細節: 哪種程式語言、資料庫結構、演算法等。
-
系統基礎架構: 部署在哪裡、使用了哪些伺服器、網路拓撲結構等
-
版本細節:只要 API 的介面保持向後兼容,我們通常不需要深入了解目標系統的具體版本號和內部更新細節。
輕鬆易懂
範例

抓取空氣品質指標
有無API差異
不使用API
使用API
使用他「專門提供做這件事的連結」 ,取得整理好的資料


https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=9b651a1b-0732-418e-b4e9-e784417cadef&limit=1000&sort=ImportDate%20desc&format=JSON"

範例
# PRESENTING CODE
import requests
url = "https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=9b651a1b-0732-418e-b4e9-e784417cadef&limit=1000&sort=ImportDate%20desc&format=JSON"
Useragent = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=Useragent)
print(response.text)

輸出:


# PRESENTING CODE

如何解析?
我是樹林人
.json
- API回傳的通常是JSON格式
- 是種常見的輕量級資料交換格式
❓Python看不懂
✔️轉換成Python字典格式
❗使用.JSON解碼
.json
- JSON {物件} 會被轉換成 Python 字典 (dictionary)。
- JSON [陣列] 會被轉換成 Python 列表 (list)。
語法:
response = (requests.get(url, headers=Useragent)).json()
在回傳後的資料加上.json()
注意事項:只有格式為json時才會運作,否則會報錯
# PRESENTING CODE
.JSON範例
import requests
url = "https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=9b651a1b-0732-418e-b4e9-e784417cadef&limit=1000&sort=ImportDate%20desc&format=JSON"
Useragent = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = (requests.get(url, headers=Useragent)).json()
print(response)
輸出:

✅輸出Python字典格式
.JSON後取得數值
❓轉換成字典之後,如何取得其中的數值?
✔️直接取得字典內的數值
❗使用KEY處理巢狀結構

ex.取得pm10=多少?
# PRESENTING CODE
獲取KEY
data = {
'status': 'success',
'result': {
'user': {
'id': 123,
'profile': {
'name': 'Alice',
'age': 30,
'address': {
'city': 'Taipei',
'zipcode': '100'
}
},
'hobbies': ['reading', 'coding']
}
}
}
user_id = data['result']['user']['id']
print(user_id)
基本語法
依序取得鍵中的鑑中的值
data['result'] -> {'user': ...}
data['result']['user'] -> {'id': 123, 'profile': ...}
data['result']['user']['id'] -> 123
# PRESENTING CODE
獲取pm10作法詳解
import requests
import json
url = "https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=9b651a1b-0732-418e-b4e9-e784417cadef&limit=1000&sort=ImportDate%20desc&format=JSON"
Useragent = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=Useragent)
data = response.json()
for record in data['records']:
if record['sitename'] == '屏東':
print(record['pm10'])
- 因為資料有很多組 所以遍歷所有record
- 找到【屏東】就停下
- 尋找屏東的pm10

30
自己尋找API
- 不是所有東西都有提供公開的API
❓想取得那種資料怎麼辦
✔️自己找&直接get讓他回傳
ex.網頁遊戲的個人資料頁面

- 他不可能給你API讓你抓取別人個資
- 但你可以自己找API取得這些數值
自己尋找API

1.

2.
檢查
network
自己尋找API
3.點擊會取得資料的物件
ex.按下頭像會跳出資料
4.你會看到一個.json,點進去



自己尋找API

API在此
這是使用post,會在下個章節說明
5.
自己尋找API

回傳的內容

此時就可以透過解析巢狀結構來獲取想要的資料
練習題:
抓取產銷履歷Tracecode為00991927504943的產品名稱(ProductName)
# PRESENTING CODE
答案:
(貼標) 福山萵苣油麥菜-大陸妹

用for迴圈遍歷,如果Tracecode為00991927504943,就印出ProductName【(貼標) 福山萵苣油麥菜-大陸妹】
專案實作 :
遊戲外掛結合
TG聊天機器人
用途:
透過對聊天室輸入帳密並輸入需求,後台會接收並進行遊戲




接收帳密
處理輸入內容

進行遊戲(網路爬蟲post)

資料庫





後台介面
心得與反思
學習歷程 :

一句話總結

班內自主學習報告-網路爬蟲
By wallace Lin
班內自主學習報告-網路爬蟲
- 18