換句話說
自學✅
學習成果 :
每天都重複?
好無聊 !
AUTO
讓電腦自動完成日常瑣事
定義
用程式模擬人類在網路上的行為
是怎麼做的?
就像你上網找歌單
網路爬蟲
你啟動它
輸出
進入kkbox
找到資料
記下來
進入kkbox
找到資料
記下來
抓取資料GET範例
傳送資料POST範例
就像你填春遊報名表
進入表單
填寫資料
送出
網路爬蟲
你啟動它
輸出ok
進入表單
準備資料
送到伺服器
用途:
學習成果 :
# PRESENTING CODE
url = "https://ckcsc.net/"
data = {"key": "example"}
response = requests.get(url)
response = requests.post(url, json=data)
# PRESENTING CODE
import requests
a = requests.get("https://ckcsc.net")
print(a)
賦值
使用模組
使用GET
要取得的網址
# PRESENTING CODE
import requests
a = requests.get("https://ckcsc.net")
print(a.text)
讓它輸出網站的整個內容
輸出【文字屬性】
輸出結果
看的出來成電社網大部分都是JavaScript動態生成
範例:遊戲外掛
自動開PaGamO的【假期模式】
事實上,只是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()
範例程式碼:
登入
POST到holiday(假期模式)
事實上,只是POST到API兩個小數字而已
✔️相同效果
學習歷程 :
學習歷程 :
加入相關社團
學習歷程 :
學習歷程 :
上學期時間分配
週數 | 計畫 |
---|---|
第1~2周 | 專案實作收尾 |
第3周 | 準備考幹作業 |
第4~5周 | 上台發表簡報製作 |
學習成果 :
遊戲外掛結合TG聊天機器人
語法 | 優點 | 套件 |
---|---|---|
Python | 易學,初學者首選 | requests BeautifulSoup Selenium |
JavaScript | 模擬網頁行為,能抓取動態資料 | axios, cheerio |
Java | 穩定,適合大量處理 | Jsoup, Selenium |
C# | 整合Windows系統 | HtmlAgilityPack |
直接發送請求
整理接收結果
模擬真實使用者
類型 | 用途 | 特色 |
---|---|---|
requests + BeautifulSoup | 靜態網頁 | 直接抓下整個網頁 |
Selenium | 動態網頁 | 模擬人類操作,可取得包含動態數值 |
API爬蟲 | 伺服器端口 | 官方資料接口、回傳指定資料 |
後面會再解釋原理
pip install requests
# PRESENTING CODE
# PRESENTING CODE
import requests
# PRESENTING CODE
url = "https://ckcsc.net/"
data = {"key": "example"}
response = requests.get(url)
response = requests.post(url, json=data)
有兩種?
GET? POST?
# PRESENTING CODE
屬性 | 用途 | 範例 |
---|---|---|
requests.get | 向伺服器【請求】資料 | 瀏覽網頁 |
request.post | 向伺服器【發送】資料 | 提交表單 |
郵差
( 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
我是樹林人
❓Python看不懂
✔️轉換成Python字典格式
❗使用.JSON解碼
語法:
response = (requests.get(url, headers=Useragent)).json()
在回傳後的資料加上.json()
注意事項:只有格式為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)).json()
print(response)
輸出:
✅輸出Python字典格式
❓轉換成字典之後,如何取得其中的數值?
✔️直接取得字典內的數值
❗使用KEY處理巢狀結構
ex.取得pm10=多少?
# PRESENTING CODE
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
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'])
30
❓想取得那種資料怎麼辦
✔️自己找&直接get讓他回傳
ex.網頁遊戲的個人資料頁面
1.
2.
檢查
network
3.點擊會取得資料的物件
ex.按下頭像會跳出資料
4.你會看到一個.json,點進去
API在此
這是使用post,會在下個章節說明
5.
回傳的內容
此時就可以透過解析巢狀結構來獲取想要的資料
抓取產銷履歷Tracecode為00991927504943的產品名稱(ProductName)
# PRESENTING CODE
(貼標) 福山萵苣油麥菜-大陸妹
用for迴圈遍歷,如果Tracecode為00991927504943,就印出ProductName【(貼標) 福山萵苣油麥菜-大陸妹】
遊戲外掛結合
用途:
透過對聊天室輸入帳密並輸入需求,後台會接收並進行遊戲
接收帳密
處理輸入內容
進行遊戲(網路爬蟲post)
資料庫
學習歷程 :
一句話總結