vocus logo

方格子 vocus

Python 爬蟲入門範例:建立簡易抓取網路資料的爬蟲程式

更新 發佈閱讀 10 分鐘

網路爬蟲(web crawler),也叫網路蜘蛛(spider) 是一個強大的自動化工具,可以自由瀏覽、擷取訪問網頁的各項資訊,例如:新聞文章、電商商品價格,當專案中需要添加外部數據或進行大量資料收集時,網路爬蟲就是一個非常實用的工具。

這篇主要說明爬蟲的基礎概念原理、以及爬蟲常用的 package ,最後實作爬取運動視界的文章為範例,那我們開始吧 😝

爬蟲概念

基本概念是: 透過程式模擬瀏覽網頁訪問的行為,例如: 上下捲動頁面、登入、點選…等動作,然後自動化從網頁擷取想要的資訊,資訊可以是文字、圖片、表格,或是網站上的各種內容。

實際的技術行為是,爬蟲(自動化的程式),透過網路的傳輸協定(HTTP/HTTPS)發送請求到目標網站,然後目標網站的伺服器會 return 網頁的原始碼(HTML) 。這些原始碼就包含了網頁的內容,而我們可以利用 HTML Tag 去提取與篩選需要的資訊。

可以把他簡化成兩個步驟以及其對應的套件
1. 對目標網站伺服器發送請求 -> requests
2. 解析返回的網頁 html -> beautifulsoup4

安裝套件

pip install requests 
pip install beautifulsoup4

實作策略

我們選擇運動視界作為目標網站 : https://www.sportsv.net/basketball


https://www.sportsv.net/basketball/nba

https://www.sportsv.net/basketball/nba

這個頁面是一個所有文章的列表,他包含多篇文章在這個頁面上,那實作的測略為:
1. 先爬取此頁的所有文章連結
2. 再到每一個文章的頁面爬取該文章的標題與內文

另外為保留未來多支爬蟲運行,且有相同功能的 function 可以沿用與好管理,我們把程式的架構分成兩個部分和多個 function,架構為:


程式架構

程式架構

因為每個網站爬取的方式不太相同,要取的 tag 會不同,所以我們以獨立的 Crawler 去管理各個網站的爬蟲,但因為他們有一些功能會相同並且沿用,所以先以 BaseCrawler 定義基礎 fucntion ,並讓未來 Class 可以繼承。

Code

# crawler.py 

import os
import requests
from tqdm import tqdm
from datetime import datetime
from bs4 import BeautifulSoup

class BaseCrawler:
def __init__(self, root_url, topic_url):
self.root_url = root_url
self.topic_url = topic_url

def send_http_request(self, url):
response = requests.get(url)
return response

def parse_html(self, response):
soup = BeautifulSoup(response.text, 'html.parser')
return soup

def save_data(self, folder_path, title, content):

# check title and data is str
if not isinstance(title, str):
title = str(title)
if not isinstance(content, str):
content = str(content)

# check file exist
if not os.path.exists(folder_path):
os.makedirs(folder_path)

# valid title when it as filename
filename = "".join(c for c in title if c.isalnum() or c.isspace()).rstrip()
file_path = os.path.join(folder_path, f"{filename}.txt")

# save
with open(file_path, "w", encoding="utf-8") as f:
f.write(content)


class SportVisionCrawler(BaseCrawler):

def __init__(self, root_url, topic_url):
self.root_url = root_url
self.topic_url = topic_url

def get_all_links(self, topic_url):

# check request root_url
response = self.send_http_request(topic_url)
if not response.ok:
print("Request failed")
return

if response.ok:
print("Request successful")

soup = self.parse_html(response)
h4_elements = soup.find_all('h4')

link_list = []
for h4_element in h4_elements:
a_element = h4_element.find('a')
if a_element:
link = a_element['href']
link_list.append(link)
return link_list

def crawl(self, link_list):
for link in tqdm(link_list):

response = self.send_http_request(link)
soup = self.parse_html(response)
title = soup.find('h1').text
content = soup.find('div', class_='article-content').get_text(strip=True)

self.save_data('./output_crawl/Sport_vision_crawl',title, content)

if __name__ == "__main__":

print('SportVisionCrawler')
root_url = ''
topic_url = 'https://www.sportsv.net/basketball'
crawler = SportVisionCrawler(root_url, topic_url)
link_list = crawler.get_all_links(topic_url)
crawler.crawl(link_list)


Output

raw-image

爬取這篇產出的文:

用一顆籃球練出自信與成就感 翻轉孩子的未來舞台.txt
在花蓮,有一群偏鄉孩子與教練透過他們熱愛的籃球運動,實現改變自我的歷程。籃球已成為生活中、呼吸中不可或缺的一部分,在他們人生中扮演重要角色!走進花蓮市區「籃海計畫」比賽現場,熱鬧、快節奏的西洋歌曲將整個賽場的氛圍炒熱最高點,擔任花蓮熱血鳳凰隊副隊長的鄧安,頭一回穿上繡有自己姓名的球衣,不時穿梭在隊伍中,主動帶動氣氛,鼓勵隊友們拿出積極的精神、平日練好的球技,開心、努力地參賽。請繼續往下閱讀在台灣世界展望會的陪伴下 內斂鄧安勇敢蛻變成長Photo credit:TNL Brand Studio他是副隊長鄧安,今年從花蓮縣鳳林國中畢業,即將進入四維高中就讀,從國小與籃球結緣,在籃球場上他看見自己成長與蛻變。來自單親家庭的他,與媽媽一起生活,天生個性比較膽小、安靜,不會主動表達意見,但在鄧安的內心深處就蘊藏著一顆籃球魂。

Next step

  • Selenium crawler
  • 加入logger管理
  • Error handling
  • Content save to DB

總結

1. 爬取所有文章列表的連結
2. 從連結在爬取所有標題與內文
3. 設計可擴展的框架,以管理未來新增的爬蟲管道

小心得

最近因為對外部數據有需要,而寫爬蟲程式,並且一邊學習一邊實作的過程,很感謝網上豐富的資源、還有 gpt 的協助

這是一個簡單的爬蟲範例,分享給從來沒有使用過爬蟲的人,也可以快速上手跟實作,那當然也有比較複雜的案例,有些網站的機制,可能要多繞幾層才能爬到對應的內容,或需要模擬登入、點擊的動作、甚至是前一頁是否為正常的連結導流的,這都可能成為在爬蟲的過程中需要去解決的問題。

不過覺得也不需要擔心,當爬不到的時候就再去找方法即可!

希望這篇分享有幫助正需要使用爬蟲的你,我們下次見!

留言
avatar-img
Karen的沙龍
37會員
60內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
Karen的沙龍的其他內容
2025/04/21
這篇文章分析了學習英文的動機,根據Instagram抽書活動的留言,利用文字雲技術,歸納出大眾學習英文的主要原因是提升職場競爭力,並拓展國際職場機會。學習英文已不再是選項,而是攸關職涯發展的關鍵,持續提升英文能力將為個人帶來更多職涯選擇。
Thumbnail
2025/04/21
這篇文章分析了學習英文的動機,根據Instagram抽書活動的留言,利用文字雲技術,歸納出大眾學習英文的主要原因是提升職場競爭力,並拓展國際職場機會。學習英文已不再是選項,而是攸關職涯發展的關鍵,持續提升英文能力將為個人帶來更多職涯選擇。
Thumbnail
2025/02/02
這篇文章記錄使用Easy Few-shot框架和CUB鳥類資料集實作Few-Shot Learning模型的過程,包含資料讀取、Dataloader設計、ResNet12模型設定、Few-Shot訓練和測試評估等步驟。
Thumbnail
2025/02/02
這篇文章記錄使用Easy Few-shot框架和CUB鳥類資料集實作Few-Shot Learning模型的過程,包含資料讀取、Dataloader設計、ResNet12模型設定、Few-Shot訓練和測試評估等步驟。
Thumbnail
2024/12/16
探索Few-Shot Learning如何在數據稀缺的情況下使機器學習模型迅速學習並做出精確預測。本文將介紹Few-Shot Learning的基本原理、核心策略,以及在實際應用。
Thumbnail
2024/12/16
探索Few-Shot Learning如何在數據稀缺的情況下使機器學習模型迅速學習並做出精確預測。本文將介紹Few-Shot Learning的基本原理、核心策略,以及在實際應用。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
創業者常因資金困境而無法抓住機會,利用房產活化讓二胎房貸成為財務策略的有力夥伴。 諮詢國峯厝好貸的二胎房貸服務,讓你的房子成為你最強力的天使投資人,推動事業成長。
Thumbnail
網路爬蟲的由來 網路爬蟲,也叫網路蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。網路搜尋引擎等站點通過爬蟲軟體更新自身的網站內容或其對其他網站的索引。網路爬蟲可以將自己所訪問的頁面儲存下來,以便搜尋引擎事後生成索引供使用者搜尋。 網路爬蟲的原理
Thumbnail
網路爬蟲的由來 網路爬蟲,也叫網路蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。網路搜尋引擎等站點通過爬蟲軟體更新自身的網站內容或其對其他網站的索引。網路爬蟲可以將自己所訪問的頁面儲存下來,以便搜尋引擎事後生成索引供使用者搜尋。 網路爬蟲的原理
Thumbnail
你知道嗎?網路爬蟲其實是整個搜尋世界的起點。爬蟲將所有上線的網頁快速瀏覽後並整理重點做索引,這樣搜尋引擎才能快速檢索相關內容。今天本男爵就來跟大家好好聊一下,在網路世界中無所不在,但你可能卻從未察覺到的這條「蟲」。
Thumbnail
你知道嗎?網路爬蟲其實是整個搜尋世界的起點。爬蟲將所有上線的網頁快速瀏覽後並整理重點做索引,這樣搜尋引擎才能快速檢索相關內容。今天本男爵就來跟大家好好聊一下,在網路世界中無所不在,但你可能卻從未察覺到的這條「蟲」。
Thumbnail
有沒有一種可能,我們討厭蜘蛛是因為不瞭解蜘蛛,本書能帶你從淺到深認識蜘蛛的魅力與智慧。
Thumbnail
有沒有一種可能,我們討厭蜘蛛是因為不瞭解蜘蛛,本書能帶你從淺到深認識蜘蛛的魅力與智慧。
Thumbnail
蟲蟲們的日常生活與探險、AI不同的繪畫風格
Thumbnail
蟲蟲們的日常生活與探險、AI不同的繪畫風格
Thumbnail
透過《蜘蛛人重製版》除了可以學年輕人的各種潮話,在遊戲裡建構的蜘蛛人社交帳號留言板還能看到外國網友怎麼在社交平台留言貼文。這跟電影、漫畫和書籍中能看到的英文又是不同的世界呢。
Thumbnail
透過《蜘蛛人重製版》除了可以學年輕人的各種潮話,在遊戲裡建構的蜘蛛人社交帳號留言板還能看到外國網友怎麼在社交平台留言貼文。這跟電影、漫畫和書籍中能看到的英文又是不同的世界呢。
Thumbnail
花園怎會沒有蟲?園丁哪能很怕蟲?與蟲共處樂融融??? 浩瀚的空間裡,各種階層的動、植物們,各自擁有一方天地。 或許世代為仇敵,也或許相依相存,當然也有可能互不干擾。但自家若有個小庭院,再種個花花草草,那麼土裡鑽的、花裡躲、樹叢藏,乃至水裡游、天上飛的生物們,便會終日與您為伍了。 【新詩描繪】 織網
Thumbnail
花園怎會沒有蟲?園丁哪能很怕蟲?與蟲共處樂融融??? 浩瀚的空間裡,各種階層的動、植物們,各自擁有一方天地。 或許世代為仇敵,也或許相依相存,當然也有可能互不干擾。但自家若有個小庭院,再種個花花草草,那麼土裡鑽的、花裡躲、樹叢藏,乃至水裡游、天上飛的生物們,便會終日與您為伍了。 【新詩描繪】 織網
Thumbnail
昆蟲觀察第一步:找蟲! 哪些地方容易發現昆蟲呢? 看到昆蟲如何留記錄? 跟著文章一起學,每個人都能找到有趣的發現!
Thumbnail
昆蟲觀察第一步:找蟲! 哪些地方容易發現昆蟲呢? 看到昆蟲如何留記錄? 跟著文章一起學,每個人都能找到有趣的發現!
Thumbnail
/╲/\( •̀ ω •́ )/\╱\ 🕸一本讓你「陷入情網」的蜘蛛學完全入門!🕸 /╲/\( •̀ ω •́ )/\╱\ 蜘蛛跟人類有什麼關係、怎麼思考,甚至怎麼戀愛? 最強武器「蜘蛛網」有什麼神奇的祕密? 如果這個世界沒有了蜘蛛,又會發生什麼事?…… 本書將帶你看見令人驚訝的蜘蛛生態!
Thumbnail
/╲/\( •̀ ω •́ )/\╱\ 🕸一本讓你「陷入情網」的蜘蛛學完全入門!🕸 /╲/\( •̀ ω •́ )/\╱\ 蜘蛛跟人類有什麼關係、怎麼思考,甚至怎麼戀愛? 最強武器「蜘蛛網」有什麼神奇的祕密? 如果這個世界沒有了蜘蛛,又會發生什麼事?…… 本書將帶你看見令人驚訝的蜘蛛生態!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News