【Python 網路爬蟲筆記】Introduction - part 1
【Python 網路爬蟲筆記】Introduction - part 1
感謝你點進本篇文章!!我是 LukeTseng,一個熱愛資訊的無名創作者,由於近期大學開設大數據分析程式設計這門課程,裡面談到了爬蟲概念,讓我激起一些興趣,因而製作本系列筆記。
聲明:本篇筆記僅供個人學習用途,斟酌參考。
何謂網路爬蟲(Web Crawler)?

網路爬蟲(Web Crawler),也叫網路蜘蛛,是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。
From WikiPedia
網路爬蟲最主要的用處是可以「自動化」幫我們擷取及收集想要的資訊。
一般的 Web 網站上都是以 HTML 結構化網站,內部也有一些 CSS Selector,透過網路爬蟲可以去解析 HTML 跟 CSS 來幫我們找到想要的資訊,找到的資訊可以存放在 .csv 或是 data base 當中。
不是只有擷取資料就叫網路爬蟲
網路爬蟲是一個自動化的程式,能模擬人類瀏覽網頁的行為,系統性的去存取網站並擷取資料。
如果具有結構性的資料已現存在網路上的話,又或是有 API 可以存取資料,這些我們都不需要動用到網路爬蟲,因為直接取得就好了。
網路爬蟲的應用
- 抓取 ptt 上某個分類的留言、瀏覽量等。
- 抓取電商網站上的價格,假設有特價,低於原價時會用某種方式通知。
- 股票資訊收集(股價、月報、財報等),加上大數據分析去追蹤股價趨勢。
- Google Bot(Google Search Console 那個自動化程式,可以拿來檢查網頁情況)
- SEO 優化
- AI 訓練、資料科學(可做為機器學習資料集的建構)
網路爬蟲的種類
靜態網頁(靜態爬蟲)
要在靜態網頁上執行爬蟲程式相對簡單,因為這種類型的網站只要完成一個 Request 跟 Response 之後,Client(客戶端)跟 Server(伺服端)就不會有任何的交流了。
所有的互動都只與瀏覽器的網頁互動,資訊不會傳遞到後端伺服器。
From steam.oxxostudio.tw
特性:
- HTML 內容可直接使用(不需額外的 JS 執行來加載或修改內容)
- 簡單方便執行(不需處理 Client 邏輯或動態內容)
- 速度較快(因為內容已寫死在 HTML 裡面,爬蟲程式可以直接對它去做解析)
哪些網站是靜態網頁的?
- Wikipedia
- 公司官網的產品介紹頁
- 新聞網站發布的文章
可能用到的 Python 模組:
- Beautiful Soup
- lxml
動態網頁(動態爬蟲)
相對的,若要在動態網頁上執行爬蟲程式,就會相對複雜。動態網頁會依據 user 行為不斷去跟 server 做交流。
它(動態網頁)會因為變數的改變而產生不同的網頁。這既可能是伺服器端生成的網頁,也可能是使用者端生成的網頁,或是兩者的混合。
From WikiPedia
常見用於動態網頁的語言有:
- PHP
- ASP
等等這些。
特性:
- 需處理 JS(需等待 JS 執行完才能獲得完整內容)
- 需模擬 user 互動(可能需要點擊、滾動、輸入等操作來觸發內容載入)
- 速度慢且雜(需額外的瀏覽器引擎或工具來處理動態內容)
哪些網頁是動態網頁?
- Facebook、Instagram 的動態消息(需要登入和滾動載入)
- Google Map 的地圖資料(需縮放跟拖曳)
- 電商網站的商品搜尋結果(需搜尋關鍵字)
可能用到的 Python 模組:
- Selenium
一覽表
| 分類 | 靜態網頁(靜態爬蟲) | 動態網頁(動態爬蟲) |
|---|---|---|
| 定義 | 一次 Request/Response 後就不再與伺服器交互,內容直接寫死在 HTML 中。 | 依據使用者行為不斷與伺服器交互,內容會因變數或操作而動態產生。 |
| 引用 | 所有的互動都只與瀏覽器的網頁互動,資訊不會傳遞到後端伺服器。 | 它(動態網頁)會因為變數的改變而產生不同的網頁。 |
| 特性 | - HTML 內容可直接使用 - 簡單方便執行 - 速度較快 | - 需處理 JS - 需模擬 user 互動 - 速度慢且雜 |
| 常見網站 | - Wikipedia - 公司官網產品介紹頁 - 新聞文章 | - Facebook、Instagram 動態消息 - Google Map - 電商網站搜尋結果 |
| 常見技術/語言 | - HTML 為主 | - PHP - ASP 等 |
| Python 模組 | - Beautiful Soup - lxml | - Selenium |
用爬蟲可以,但切勿觸法!
著作權法部分,網路上任何文字、圖片內容都受著作權法保障(著作權法第十條:著作人於著作完成時享有著作權。但本法另有規定者,從其規定)
若未經過作者同意使用,則不能直接使用。(若未取得授權直接使用可能觸犯著作權法第九十一條)
再來是刑法的部分,若爬蟲做到以下這些事情的話:
- 繞過網站的防禦機制。
- 無故取得、刪除或變更目標網站資料。
- 使用了超越應有的權限資料。
- 爬取資料未設定適當延遲,可能被當成 DDos 攻擊。
可能會觸犯刑法上的第三百五十八至三百六十條。
刑法第 358 條:
無故輸入他人帳號密碼、破解使用電腦之保護措施或利用電腦系統之漏洞,而入侵他人之電腦或其相關設備者,處三年以下有期徒刑、拘役或科或併科三十萬元以下罰金。
刑法第 359 條:
無故取得、刪除或變更他人電腦或其相關設備之電磁紀錄,致生損害於公眾或他人者,處五年以下有期徒刑、拘役或科或併科六十萬元以下罰金。
刑法第 360 條:
無故以電腦程式或其他電磁方式干擾他人電腦或其相關設備,致生損害於公眾或他人者,處三年以下有期徒刑、拘役或科或併科三十萬元以下罰金。
最後也要留意網站上 robot.txt 的規範,什麼是 robot.txt?robots.txt 是網站與爬蟲之間的約定,位於網站根目錄下。
robot.txt 通常會寫允許什麼樣的 User-Agent 訪問,以及 Crawl-delay (爬取資料延遲)訪問間隔時間。
如果網站有提供 API,那就優先使用 API 就好了,因為 API 不僅效率更高,也避免了許多法律和技術問題。
認識 HTTP
為什麼要認識 HTTP?因為我們要在做爬蟲應用之前,認識一下網路的基本概論是很重要的事情,不然到時候用 Python 的 Request 模組會不清楚裡面運作原理到底是幹嘛的。
HTTP 協定

Image Source:https://hackmd.io/@Huei/HkfFHq0g_
上面是一張 HTTP Request 與 Response 的簡圖。
首先來認識什麼是 HTTP 協定,HTTP 英文全名為 HyperText Transfer Protocol,翻中的話就是「超文本傳輸協定」。
是一種用於分佈式、協作式和超媒體訊息系統的應用層協定。HTTP是全球資訊網的數據通訊的基礎。
From WikiPedia
HTTP 簡單來說可以看作是電腦與電腦間的溝通方式,用於在網路上傳輸網頁、圖片、影片等資源的應用層協定。每當我們在瀏覽器中打開網頁時,背後就是透過 HTTP 協定在運作。
它被設計來讓瀏覽器和伺服器進行溝通,但也可做其他用途。
HTTP 採用 Client-Server 模型(也稱為主從式架構:Client/Server Architect),如同上圖,運作方式基於「請求與回應」(Request/Response)的架構:
- Client 發送請求(Requests):如當在瀏覽器中輸入網址並按下 Enter,瀏覽器會向託管網站的 Server 發送 HTTP 請求。
- Server 處理回應(Responses):Server 收到 Response 後,會回傳狀態碼(Status Code)(如 “HTTP/1.1 200 OK”)以及 Requests 的內容,如 HTML 檔案、圖片或錯誤訊息等。
- 預設通訊埠(Port):HTTP 通常使用 TCP 協定,預設在 80 埠進行通訊。
Client 發送 Requests 的情境也不一定是輸入網址按下 Enter,也可能是在購物網站上按下訂單按鈕後,向 Server 發送 Requests,總之就是 HTTP 無所不在。
Request Method
HTTP Request Method 主要告訴 Server 想要幹嘛,如同在餐廳的櫃檯前明確告訴服務生,要點菜?還是結帳之類的。
也如有個 HTTP Request Method 是 GET,表示要告訴 Server 端說要獲取某些資料。
常見的 HTTP 方法有:
- GET:從 Server 檢索資料(如載入網頁)。
- POST:向 Server 發送資料以創建新資源(如提交表單)。
- PUT:更新伺服器上的現有資源。
- DELETE:從伺服器中刪除資源。
- HEAD:僅檢索回應的標頭,不檢索實際資料。
- PATCH:部分更新現有資源。
Request URL
URL 英文全名為 Uniform Resource Locator,翻中為統一資源定位符(或稱統一資源定位器、定位位址、URL位址),簡單來說就是網址啦。
Request URL 指的是 HTTP Request 中 Client 希望存取的 Server 上具體資源的路徑位置。它告訴 Server 「你想要什麼資源」,如同在圖書館中告訴圖書館員你要借哪本書一樣。
以下的 HTTP Request 中的第二個 /index.html 就是 Request URL。
1 | GET /index.html HTTP/1.1 |
補充一下 URL 的完整格式:
1 | [協定]://[伺服器位置]:[連接埠號碼]/[檔案路徑] |
以 http://www.example.com:3000/home 為例:
- 協定(Protocol):http - 指定使用的通訊協定。
- 主機(Host):
www.example.com- 伺服器的網域名稱或 IP 位址。 - 通訊埠(Port):3000 - 連接埠號碼(HTTP 預設 80,HTTPS 預設 443)。
- 路徑(Path):/home - 伺服器上的資源路徑。
Request URL 的組成要素
- 路徑(Path)
指定伺服器上檔案或資源的具體位置,如 /products/list 或 /api/users。
- 查詢字串(Query Strings)
用於傳遞額外參數給伺服器,格式為 ?參數1=值1&參數2=值2:
1 | http://www.example.com/search?keyword=手機&price=1000 |
?是查詢字串的開始符號。&用來分隔不同的參數。keyword=手機和price=1000是具體的參數。
HTTP 標頭(Header)
HTTP 通訊協定是用 HTTP 標頭(HTTP Header)在客戶端跟伺服端之間交換瀏覽器、請求資源和 Web 伺服器等相關資訊,這是 HTTP 通訊協定溝通訊息的核心內容。
From 《Python 網路爬蟲與資料視覺化應用實務》章節 2 - 1 - 1(HTTP 標頭)第 2-2 頁
另外 Headers 就只是一對鍵值對 key : value。
HTTP Headers 大致上分成四種:
- 一般標頭(General Headers):
- 適用於請求和回應的通用資訊,如 Connection(控制連線是否保持)、Cache-Control、Date(訊息產生的時間)。
- 請求標頭(Request Headers):
- 包含請求資源或 Client 的資訊,如 Host(目標伺服器的網域名稱)、User-Agent(客戶端軟體身份識別)、Accept(客戶端能接受的內容類型)、Authorization(身份驗證資訊)。
- 回應標頭(Response Headers):
- 包含回應的資訊,如 Server(伺服器軟體資訊)、Set-Cookie(設定 Cookie 值)、Location(重新導向的目標位置)。
- 實體標頭(Entity Headers):
- 描述訊息主體的資訊,如 Content-Type(內容的 MIME 類型)、Content-Length(內容長度)、Content-Encoding(內容編碼方式)。
如何檢視 HTTP 標頭
以本文作者網站作為示例:https://luketsengtw.github.io
在任意處按下右鍵 -> 檢查,可開啟開發人員工具。

或是直接按下 F12 即可跳出右邊欄的東東:

接下來前往 【Network】,再刷新網頁(按下 F5)或在上面 Reload page 也可以:

重刷完後上面記得選擇 All。

接下來滑鼠左鍵點擊 luketsengtw.github.io 這個檔案:

然後就會跳出如下圖右方紅框處出現的 HTTP 標頭了!

General Headers 的內容
從圖中可以看到 General Headers 的內容大致如下:
1 | Request URL: https://luketsengtw.github.io/ |
基本上就是顯示一般的資訊啦,像是什麼網址、Request Method、Status Code 顯示請求成功等等。
Response 可看到 Server 回傳的內容
當我們進入一個網址後,要在本地端看到網頁,就需要透過 Server 回傳 html 給我們才能看到。
如下圖,當按下 Response 選項,即可看到伺服器回傳的 HTML 語言:

總結
網路爬蟲(Web Crawler)是一種自動化的程式,可以模擬人類瀏覽網頁的行為,系統性地存取並擷取網站上的資訊,常用於自動化收集結構化資料如 HTML 中的內容。爬蟲有靜態與動態兩種形式,分別用於不同類型的網頁。
簡要定義
網路爬蟲(Web Crawler):自動瀏覽和抓取網頁資料的機器人程式,用於資料擷取與收集。
用途:自動化擷取網頁內容後,存到資料庫或 CSV 用於後續分析。
應用範例:
- 抓取PTT文章留言與瀏覽數
- 電商價格監控與特價通知
- 股票資訊數據收集及分析
- Google Bot 網站爬取與SEO優化
- 機器學習資料集建構
靜態爬蟲 vs 動態爬蟲
| 分類 | 靜態網頁(靜態爬蟲) | 動態網頁(動態爬蟲) |
|---|---|---|
| 定義 | 一次 Request/Response 後就不再與伺服器交互,內容直接寫死在 HTML 中。 | 依據使用者行為不斷與伺服器交互,內容會因變數或操作而動態產生。 |
| 引用 | 所有的互動都只與瀏覽器的網頁互動,資訊不會傳遞到後端伺服器。 | 它(動態網頁)會因為變數的改變而產生不同的網頁。 |
| 特性 | - HTML 內容可直接使用 - 簡單方便執行 - 速度較快 | - 需處理 JS - 需模擬 user 互動 - 速度慢且雜 |
| 常見網站 | - Wikipedia - 公司官網產品介紹頁 - 新聞文章 | - Facebook、Instagram 動態消息 - Google Map - 電商網站搜尋結果 |
| 常見技術/語言 | - HTML 為主 | - PHP - ASP 等 |
| Python 模組 | - Beautiful Soup - lxml | - Selenium |
基本HTTP認識
- HTTP (HyperText Transfer Protocol)是「超文本傳輸協定」,負責瀏覽器和伺服器間的溝通。
- 運作基於 Client-Server 模型(主從式架構),透過 Request(請求)和 Response(回應)交互傳輸資料。
- 常用 Request 方法:GET(抓取資料)、POST(送出資料)、PUT、DELETE 等。
- Request URL 指明要請求的資源位置,包括協定、主機、埠號、路徑與查詢字串。
HTTP Header 分類
- General Headers:通用資訊,如 Connection、Date
- Request Headers:客戶端資料,如 Host、User-Agent、Accept
- Response Headers:伺服器回應資訊,如 Server、Set-Cookie
- Entity Headers:訊息內容描述,如 Content-Type, Content-Length
如何檢視HTTP標頭
- 【右鍵點選網頁 → 檢查】或【按 F12 叫出開發者工具】
- 選擇 【Network】標籤,重新載入頁面。
- 點擊欲查看的網頁請求項目,即可見 Request 與 Response 的 Header 及內容。
Reference
參考書籍《Python 網路爬蟲與資料視覺化應用實務》章節 1 - 3(網路爬蟲的概念)第 1-10 頁。
參考書籍《Python 網路爬蟲與資料視覺化應用實務》章節 2 - 1 - 1(HTTP 標頭)第 2-2 頁。
關於網路爬蟲 - Python 教學 | STEAM 教育學習網
網路爬蟲是什麼 | 網路蜘蛛如何運作? | Cloudflare
網路爬蟲如何操控你的SEO排名?關鍵原理與應用一次看懂 - 玩構科技
[Day3]靜態網頁與動態網頁爬蟲 | iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
用爬蟲爬取網路上的資料違法嗎?使用公開資訊要小心!天矽科技網頁設計
爬蟲軟體法律風險全解析:著作權、個資、合約與競爭法的界線在哪裡? - 李明勳律師
[Day08] 天天上網看到的HTTP是甚麼? Web開發初學者必學!!! | iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
Client Request, Server Response - HackMD





