iT邦幫忙

0

【Python】12.爬蟲起步走!用 requests 模組向全世界的網站打招呼

  • 分享至 

  • xImage
  •  

Python 的終極目標——「網路爬蟲(Web Scraper)」!

平常我們想看新聞、查天氣,都是打開瀏覽器(如 Chrome),用手指點擊網址、看著網頁漂亮的畫面。
那如果我們想讓 Python 自己上網去把這幾萬筆的資料通通下載下來呢?
這就要請到Python 爬蟲界最有名、最親切的超級外交官—— requests 模組

究竟爬蟲是如何跟全世界的網站伺服器「打招呼、拿包裹」的?

📬 輕鬆譬喻:爬蟲的本質就是「寄信與拿包裹」

在開始寫 Code 之前,我們先花一分鐘搞懂網路運作的底層邏輯。

網路上所有的互動,本質上都是 「請求(Request)」 與 「回應(Response)」 的過程:

• 瀏覽器(你) 就像是寄信人。你在網址列輸入 google.com,等於是寫了一封信給 Google 的總部(伺服器),大喊:「請把你們家的首頁包裹寄給我!」
• Google 伺服器(網站) 收到信後,檢查沒問題,就會把包著網頁原始碼的包裹(Response)透過網路線郵寄回你的電腦。
• 瀏覽器 收到包裹後打開,幫你把裡面醜醜的網頁原始碼,畫成你平常看到的漂亮網頁。
而我們的「網路爬蟲」,就是跳過瀏覽器,直接用 Python 程式碼扮演寄信人,自己去寫信、自己去接包裹!

🛠️ 步驟一:安裝外包工具箱(第三方套件)

請打開你的 VS Code 建立資料夾並進入專案資料夾,在下方的終端機(Terminal)輸入以下:

先建立虛擬環境,避免requests在全域安裝

避免套件大亂鬥:爬蟲常會用到各種強大套件(如 requests、BeautifulSoup、Selenium 等)。不同套件間的版本若起衝突,會讓整個環境癱瘓。

# 建立虛擬環境 (Windows)
python -m venv venv
#啟動虛擬環境
venv\Scripts\activate
# 建立虛擬環境 (macOS / Linux)
python3 -m venv venv
#啟動虛擬環境
source venv/bin/activate

啟動成功後,終端機提示字元前方會出現 (.venv) 字樣
使用 venv 虛擬環境用意是避免全域環境污染

再來安裝requests「第三方套件」

pip install requests

(註:pip 是 Python 專屬的軟體商店下載員,這行字代表「請 pip 幫我去商店下載並安裝 requests 套件」。)
當你看到終端機跑出一條進度條,最後顯示 Successfully installed requests-...,就代表安裝成功囉!

若是不小心在全域安裝 requestsm,請用移除的方式

pip uninstall requests

🛠️ 步驟二:用 Python 寄出第一封信(GET 請求)

現在,我們要用 Python 去跟一個專門提供測試的知名網站(HTTPBin)打招呼,試著把它的網頁包裹拿回來!
請在 VS Code 裡建立一個 my_scraper.py,寫下這幾行程式碼:

#1. 請出剛下載好的外交官
import requests

#2. 設定你要寫信去哪裡(目標網址)
url = "https://httpbin.org"

#3. 寄出信件!使用 GET 方式去拿資料,並用 response 接住包裹
response = requests.get(url)

#4. 打開包裹,看看網站給我們什麼回應
print("包裹內容物:")
print(response.text)  # .text 代表把包裹裡的內容轉成文字印出來

執行後,你會在終端機看到一堆大括號和英文組成的密密麻麻資料。
恭喜你!!!你剛剛成功完成了人生第一次的網路爬蟲,那些字不是寫在你的電腦裡,而是你剛剛跨越網際網路,從遠方的伺服器即時抓回來的!

結束虛擬環境

deactivate

你可以將 venv 當作是專屬每個爬蟲專案的「百寶箱」,只要養成習慣為每一個新專案建立一個獨立的虛擬環境,未來在寫爬蟲時就能省去 90% 以上的環境設定麻煩!

🚥 關鍵關卡:看懂包裹上的「網頁狀態碼」

寄信出門,不一定每次都能成功拿到包裹。有時候網站倒閉了、有時候網址打錯了,我們要怎麼知道這封信有沒有順利寄到?
我們可以檢查包裹上的 「狀態碼(Status Code)」:

print("這封信的投遞狀態碼:", response.status_code)

🎨 常見的狀態碼大便簽(上網查資料必備):

• 200(萬事如意):代表信件成功送達,網站也開開心心地把包裹交給你了!
• 404(查無此人):網址打錯了,或者是這個網頁已經被刪除了。
• 403(拒絕往來戶):網站發現你是爬蟲(不是人類),所以啟動保安系統把你拒之門外。
• 500(對方家裡失火):網站自己的伺服器壞掉了、程式寫錯當機了。

💡 進階防禦思維:

結合前天學的 if 判斷,我們在抓資料前可以先檢查狀態碼是不是 200,如果是 200 才繼續處理資料,這樣程式才不會因為抓到空包裹而閃退喔!

今日結語:你向世界打招呼了嗎?

今天我們成功用 pip 安裝了 requests,並且用大白話弄懂了網路寄信拿包裹(Request & Response)與 200 狀態碼的觀念。
不過,你一定會發現:「抓回來的網頁原始碼像一堆亂成一團的毛線,根本找不到我們要的新聞標題或價格啊!」
別急,我們要請出第二位爬蟲界的大大——BeautifulSoup。它是一把神奇的特製梳子,能幫你把網頁這團亂毛線給優雅地梳理開來,精準抓出隱藏在裡面的黃金資料!

🧑💻 今日小作業

動手試試看:

  1. 用 requests.get() 試著去抓抓看 Google 的首頁:https://google.com
  2. 用 print(response.status_code) 印出它的狀態碼。
  3. 用 print(response.text[:200]) 印出它包裹的前 200 個字(因為首頁原始碼太長了,我們只看開頭)。
    看看 Google 首頁在 Python 的眼裡到底長什麼樣子吧!

圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言