【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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up