【Python 網路爬蟲筆記】Introduction - part 1 === 目錄(Table of Contents): [TOC] --- 感謝你點進本篇文章!!我是 LukeTseng,一個熱愛資訊的無名創作者,由於近期大學開設大數據分析程式設計這門課程,裡面談到了爬蟲概念,讓我激起一些興趣,因而製作本系列筆記。 聲明:本篇筆記僅供個人學習用途,斟酌參考。 ## 何謂網路爬蟲(Web Crawler)?  Image Source:https://www.freepik.com/free-vector/cute-spider-sticker-white-background_20770625.htm#fromView=keyword&page=1&position=48&uuid=58458110-a248-4037-895d-b6b66f71a92b&query=Spider+cartoon > 網路爬蟲(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](https://steam.oxxostudio.tw/category/python/spider/about-spider.html) 特性: - 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 內容可直接使用<br>- 簡單方便執行<br>- 速度較快 | - 需處理 JS<br>- 需模擬 user 互動<br>- 速度慢且雜 | | 常見網站 | - Wikipedia<br>- 公司官網產品介紹頁<br>- 新聞文章 | - Facebook、Instagram 動態消息<br>- Google Map<br>- 電商網站搜尋結果 | | 常見技術/語言 | - HTML 為主 | - PHP<br>- ASP 等 | | Python 模組 | - Beautiful Soup<br>- lxml | - Selenium | ## 用爬蟲可以,但切勿觸法! 著作權法部分,網路上任何文字、圖片內容都受著作權法保障(著作權法第十條:著作人於著作完成時享有著作權。但本法另有規定者,從其規定) 若未經過作者同意使用,則不能直接使用。(若未取得授權直接使用可能觸犯著作權法第九十一條) 再來是刑法的部分,若爬蟲做到以下這些事情的話: 1. 繞過網站的防禦機制。 2. 無故取得、刪除或變更目標網站資料。 3. 使用了超越應有的權限資料。 4. 爬取資料未設定適當延遲,可能被當成 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 英文全名為 **H**yper**T**ext **T**ransfer **P**rotocol,翻中的話就是「超文本傳輸協定」。 > 是一種用於分佈式、協作式和超媒體訊息系統的應用層協定。HTTP是全球資訊網的數據通訊的基礎。 > From WikiPedia HTTP 簡單來說可以看作是電腦與電腦間的溝通方式,用於在網路上傳輸網頁、圖片、影片等資源的應用層協定。每當我們在瀏覽器中打開網頁時,背後就是透過 HTTP 協定在運作。 它被設計來讓瀏覽器和伺服器進行溝通,但也可做其他用途。 HTTP 採用 Client-Server 模型(也稱為主從式架構:Client/Server Architect),如同上圖,運作方式基於「請求與回應」(Request/Response)的架構: 1. Client 發送請求(Requests):如當在瀏覽器中輸入網址並按下 Enter,瀏覽器會向託管網站的 Server 發送 HTTP 請求。 2. Server 處理回應(Responses):Server 收到 Response 後,會回傳狀態碼(Status Code)(如 "HTTP/1.1 200 OK")以及 Requests 的內容,如 HTML 檔案、圖片或錯誤訊息等。 3. 預設通訊埠(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 英文全名為 **U**niform **R**esource **L**ocator,翻中為統一資源定位符(或稱統一資源定位器、定位位址、URL位址),簡單來說就是網址啦。 Request URL 指的是 HTTP Request 中 Client 希望存取的 Server 上具體資源的**路徑位置**。它告訴 Server 「你想要什麼資源」,如同在圖書館中告訴圖書館員你要借哪本書一樣。 以下的 HTTP Request 中的第二個 `/index.html` 就是 Request URL。 ``` GET /index.html HTTP/1.1 ``` 補充一下 URL 的完整格式: ``` [協定]://[伺服器位置]:[連接埠號碼]/[檔案路徑] ``` 以 `http://www.example.com:3000/home` 為例: - 協定(Protocol):http - 指定使用的通訊協定。 - 主機(Host):`www.example.com` - 伺服器的網域名稱或 IP 位址。 - 通訊埠(Port):3000 - 連接埠號碼(HTTP 預設 80,HTTPS 預設 443)。 - 路徑(Path):/home - 伺服器上的資源路徑。 #### Request URL 的組成要素 1. 路徑(Path) 指定伺服器上檔案或資源的具體位置,如 `/products/list` 或 `/api/users`。 2. 查詢字串(Query Strings) 用於傳遞額外參數給伺服器,格式為 `?參數1=值1&參數2=值2`: ``` 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 的內容大致如下: ``` Request URL: https://luketsengtw.github.io/ Request Method: GET Status Code: 200 OK (from service worker) Referrer Policy: strict-origin-when-cross-origin ``` 基本上就是顯示一般的資訊啦,像是什麼網址、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 內容可直接使用<br>- 簡單方便執行<br>- 速度較快 | - 需處理 JS<br>- 需模擬 user 互動<br>- 速度慢且雜 | | 常見網站 | - Wikipedia<br>- 公司官網產品介紹頁<br>- 新聞文章 | - Facebook、Instagram 動態消息<br>- Google Map<br>- 電商網站搜尋結果 | | 常見技術/語言 | - HTML 為主 | - PHP<br>- ASP 等 | | Python 模組 | - Beautiful Soup<br>- 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標頭 1. 【右鍵點選網頁 → 檢查】或【按 F12 叫出開發者工具】 2. 選擇 【Network】標籤,重新載入頁面。 3. 點擊欲查看的網頁請求項目,即可見 Request 與 Response 的 Header 及內容。 ## Reference 參考書籍《Python 網路爬蟲與資料視覺化應用實務》章節 1 - 3(網路爬蟲的概念)第 1-10 頁。 參考書籍《Python 網路爬蟲與資料視覺化應用實務》章節 2 - 1 - 1(HTTP 標頭)第 2-2 頁。 [關於網路爬蟲 - Python 教學 | STEAM 教育學習網](https://steam.oxxostudio.tw/category/python/spider/about-spider.html) [網路爬蟲 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E7%B6%B2%E8%B7%AF%E7%88%AC%E8%9F%B2) [網路爬蟲是什麼 | 網路蜘蛛如何運作? | Cloudflare](https://www.cloudflare.com/zh-tw/learning/bots/what-is-a-web-crawler/) [網路爬蟲如何操控你的SEO排名?關鍵原理與應用一次看懂 - 玩構科技](https://www.iwangoweb.com/seo/web-crawler-application/) [網路爬蟲入門 - HackMD](https://hackmd.io/@Jack20000311/ByEZIU203) [[Day3]靜態網頁與動態網頁爬蟲 | iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天](https://ithelp.ithome.com.tw/m/articles/10353294) [用爬蟲爬取網路上的資料違法嗎?使用公開資訊要小心!天矽科技網頁設計](https://www.tsg.com.tw/blog-detail3-246--web-crawler.htm) [爬蟲軟體法律風險全解析:著作權、個資、合約與競爭法的界線在哪裡? - 李明勳律師](https://hansli-lawyer.com/2025/07/15/web-crawler-legal-risks-made-simple-everything-you-need-to-know-about-copyright-privacy-and-competition-law/) [著作權法§10-全國法規資料庫](https://law.moj.gov.tw/LawClass/LawSingle.aspx?pcode=J0070017&flno=10) [著作權法§91-全國法規資料庫](https://law.moj.gov.tw/LawClass/LawSingle.aspx?Pcode=J0070017&FLNO=91) [中華民國刑法§358-全國法規資料庫](https://law.moj.gov.tw/LawClass/LawSingle.aspx?pcode=C0000001&flno=358) [中華民國刑法§359-全國法規資料庫](https://law.moj.gov.tw/LawClass/LawSingle.aspx?pcode=C0000001&flno=359) [中華民國刑法§360-全國法規資料庫](https://law.moj.gov.tw/LawClass/LawSingle.aspx?pcode=C0000001&flno=360) [超文本傳輸協定 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE) [[Day08] 天天上網看到的HTTP是甚麼? Web開發初學者必學!!! | iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天](https://ithelp.ithome.com.tw/m/articles/10296386) [Client Request, Server Response - HackMD](https://hackmd.io/@Huei/HkfFHq0g_) [HTTP headers 簡介: 一些常用的headers | HoMuChen](https://homuchen.com/posts/http-headers/) [網路概論3: HTTP - App 開發基礎](https://ihower.tw/cs/networking-http.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.