網路爬蟲(Web Scraping)簡介與實作

網路爬蟲(Web Scraping)簡介與實作

更新於 發佈於 閱讀時間約 5 分鐘

關於爬蟲這個主題已經有許多前輩介紹了,但我現在才開始學習。本篇也會實際操作我自己嘗試的網路爬蟲。

1. 爬蟲簡介

什麼是網路爬蟲?

網路爬蟲(Web Scraping) 就像在網路上「自動蒐集資料的機器人」。

想像情境:

你是一個學生,想蒐集補習班課程的資料。如果你手動查詢每個補習班的課程、時間與價格,會非常耗時。這時,爬蟲 就像一個自動助教,幫你到各個補習班網站,自動找出相關資訊並存入資料庫


爬蟲的工作流程

  1. 發送請求(Request):爬蟲像瀏覽器一樣,向網站發出請求,索取資料。
  2. 接收回應(Response):網站回應 HTML 網頁內容。
  3. 資料解析(Parsing):爬蟲從 HTML 中挑出有用的資料
  4. 儲存資料(Storage):將蒐集到的資料存進檔案或資料庫

然而並不是每個網站都可以直接爬蟲,有些網站會禁止爬蟲,因為大量的爬蟲會使小型的 Server 崩潰。不能大規模的爬蟲,又要提供使用者一些資料,就會使用 API 這個功能


2. API 是一個窗口

什麼是 API?

API(Application Programming Interface) 就像網站提供的自動窗口

補習班比喻:查詢窗口

  • API = 點餐機 (API 是點餐窗口) 就像速食店的自動點餐機,它是一個標準化的窗口,讓你方便點餐,而不需要進廚房自己做漢堡
  • 發送請求 (Request):點餐機(API)是窗口,讓顧客(程式)下訂單。
    • 你只需要選擇餐點、按下確定,點餐機會把訂單傳給廚房。
    • 你不需要知道廚房裡的料理過程(API 背後的伺服器操作)。
    • 點餐的請求格式要標準化,否則系統無法處理。
  • 處理請求 (Server): 廚房(伺服器)處理訂單,製作餐點。
    • 廚房負責處理訂單,製作對應的餐點,並將結果交給點餐機。
  • 回應資料 (Response):顧客(用戶端程式)拿到食物(資料)
    • 最後,你從點餐機拿到完成的食物(API 回應的資料),不用進廚房處理任何細節。

3. 合法爬蟲:爬蟲須知

注意事項:

  1. 網站版權與爬蟲守則:
    • 爬蟲前要查看網站的 robots.txt,了解允許抓取的範圍。
  2. 請求間隔:
    • 不要頻繁發送請求, 否則可能被視為惡意攻擊。
  3. 使用合法 API:
    • 如果網站提供 API,建議優先使用 API,速度更快、結構更穩定。



實際操作爬蟲

[Python爬蟲實例] 104人力銀行:抓取更詳細的職缺資訊,搶先別人一步收到通知!

參考其他工程師的 github(這裡有套件),原本想要用 LinkedIn 上的 ABB 亞太職缺資料 Web Scraping 結果花了 2 小時一直找不到 HTML 的 Class,希望再學完網頁後再試著練習。再來嘗試104 人力銀行的查詢也是停在從網頁抓 Header 就找不到,所以我學完網頁會再試試。

  1. 下載套件要在 Terminal 用。
raw-image

結果只能先爬有 API 的嗚嗚

爬取臺灣銀行牌告匯率

(直接點標題有教學文章)

臺灣銀行的連結與API https://rate.bot.com.tw/xrt

可以抓出當下的即時匯率:

raw-image


(取自網友提供的程式碼)

import requests

url = 'https://rate.bot.com.tw/xrt/flcsv/0/day' # 牌告匯率 CSV 網址
rate = requests.get(url) # 爬取網址內容
rate.encoding = 'utf-8' # 調整回應訊息編碼為 utf-8,避免編碼不同造成亂碼
rt = rate.text # 以文字模式讀取內容
rts = rt.split('\n') # 使用「換行」將內容拆分成串列
for i in rts: # 讀取串列的每個項目
try: # 使用 try 避開最後一行的空白行
a = i.split(',') # 每個項目用逗號拆分成子串列
print(a[0] + ': ' + a[12]) # 取出第一個 ( 0 ) 和第十三個項目 ( 12 )
except:
break
avatar-img
越南放大鏡 X 下班資工系
13會員
60內容數
雙重身份:越南放大鏡 X 下班資工系 政大東南亞語言學系是我接觸越南語的起點,畢業後找越南外派工作的生活跟資訊時,發現幾乎都是清單式的分享,很難身歷其境。所以我希望「越南放大鏡」可以帶讀者看到更多細節和深入的觀察。 - 下班資工系則是自學資工系的課程內容,記錄實際操作的過程,學習理論的過程。希望可以跟讀者一起成長。
留言
avatar-img
留言分享你的想法!
這個單元我一直很想學習,物件導向 Object Oriented Programming 以前一直以為是一種程式碼,其實是設計程式的觀念,文中我分享了程式碼還有自己想的比喻讓讀者更好理解。除了物件導向,我還介紹其他四種風格的程式碼設計,跟大家一起學習。
深入探討操作系統和中央處理單元 (CPU) 的基本概念,涵蓋 OS 的功能、CPU 的運作,以及程式與執行緒的管理。透過生動的比喻,讀者能夠更輕鬆地理解複雜的硬體運作機制,包括記憶體管理和行程間的通訊。本文為想了解計算機科學的讀者提供了一個清晰的入門指南,讓他們掌握多程式協調與虛擬化技術的基本知識。
終於來到作業系統與 CPU 的最後一個筆記,本篇的學習目標是記憶體分配與虛擬化應用。我會學習邏輯與實體記憶體、分段與頁面管理、虛擬記憶體管理、虛擬記憶體與容器技術。
第五部分:多程式協調與通訊機制,目標:處理多個應用程式的競爭與協作 Interprocess Communication(IPC, 行程間通訊) Race Condition & Critical Section & Dekker's Algorithm Deadlock 與形成的四個條件
目標:理解程式的排程策略,如何讓多個應用程式同時執行 CPU Scheduling Criteria(CPU 調度準則) CPU Scheduling(Preemptive & Non-Preemptive)
本篇文章探討作業系統如何管理程式,介紹了 Process、Thread 及 Process Control Block(PCB)的基本概念。本文以實際例子解釋這些概念,並詳細說明 Context Switch 的運作方式以及程式的五大狀態。
這個單元我一直很想學習,物件導向 Object Oriented Programming 以前一直以為是一種程式碼,其實是設計程式的觀念,文中我分享了程式碼還有自己想的比喻讓讀者更好理解。除了物件導向,我還介紹其他四種風格的程式碼設計,跟大家一起學習。
深入探討操作系統和中央處理單元 (CPU) 的基本概念,涵蓋 OS 的功能、CPU 的運作,以及程式與執行緒的管理。透過生動的比喻,讀者能夠更輕鬆地理解複雜的硬體運作機制,包括記憶體管理和行程間的通訊。本文為想了解計算機科學的讀者提供了一個清晰的入門指南,讓他們掌握多程式協調與虛擬化技術的基本知識。
終於來到作業系統與 CPU 的最後一個筆記,本篇的學習目標是記憶體分配與虛擬化應用。我會學習邏輯與實體記憶體、分段與頁面管理、虛擬記憶體管理、虛擬記憶體與容器技術。
第五部分:多程式協調與通訊機制,目標:處理多個應用程式的競爭與協作 Interprocess Communication(IPC, 行程間通訊) Race Condition & Critical Section & Dekker's Algorithm Deadlock 與形成的四個條件
目標:理解程式的排程策略,如何讓多個應用程式同時執行 CPU Scheduling Criteria(CPU 調度準則) CPU Scheduling(Preemptive & Non-Preemptive)
本篇文章探討作業系統如何管理程式,介紹了 Process、Thread 及 Process Control Block(PCB)的基本概念。本文以實際例子解釋這些概念,並詳細說明 Context Switch 的運作方式以及程式的五大狀態。