2025年9月10日 星期三

Python 物件導向 + 網路爬蟲 + Dict 使用的簡單範例

 

🔹 範例:用物件導向抓取網頁資料,並用 Dict 儲存結果

import requests from bs4 import BeautifulSoup # 1️⃣ 定義一個網頁爬蟲類別 class WebScraper: def __init__(self, url): self.url = url self.data = {} # 使用 Dict 儲存爬取資料 # 方法:抓取網頁內容 def fetch(self): try: response = requests.get(self.url) response.raise_for_status() return response.text except Exception as e: print(f"抓取失敗: {e}") return None # 方法:解析網頁標題 def parse_title(self, html): soup = BeautifulSoup(html, "html.parser") title_tag = soup.find("title") if title_tag: self.data["title"] = title_tag.text # 存入 Dict else: self.data["title"] = "無標題" # 方法:顯示爬取結果 def show_data(self): for key, value in self.data.items(): print(f"{key}: {value}") # 2️⃣ 使用範例 if __name__ == "__main__": url = "https://www.example.com" scraper = WebScraper(url) # 建立爬蟲物件 html_content = scraper.fetch() # 抓取網頁 if html_content: scraper.parse_title(html_content) # 解析網頁標題 scraper.show_data() # 顯示結果
 

🔹 範例解析

  1. 物件導向

    • WebScraper 是一個類別,封裝了抓取、解析和顯示的方法。

    • 每個爬蟲物件都可以有自己的 url 和 data。

  2. Dict 使用

    • self.data 是字典,用來存放抓取結果,可以靈活擴展,例如增加 author, date, links 等資料欄位。

  3. 網路爬蟲

    • 用 requests 抓取網頁內容

    • 用 BeautifulSoup 解析 HTML

      🔹 __name__ 的意思

    • 底線的意義

      • Python 中 __xxx__ 這種命名方式稱為 魔術方法 / 魔術屬性(Magic Method / Dunder,Double UNDERSCORE)。

      • 它們通常由 Python 系統自動使用,用來控制某些特殊行為或提供系統訊息。

      • 每個 Python 模組都有 __name__ 這個屬性,表示這個模組的名稱。

      • 重要的判斷:

    if __name__ == "__main__": # 當前程式被直接執行時,這段程式才會跑
  4. __name__ == "__main__" 的意思:

    • 「這個模組是直接被 Python 執行的,而不是被別的模組 import 的」

    • 如果這個模組是被別的程式 import,__name__ 就會是模組名稱,而不是 "__main__"


🔹 舉例

檔案 example.py:

def say_hello(): print("Hello") if __name__ == "__main__": say_hello()
  1. 直接執行

python example.py

輸出:

Hello
  1. 被別的模組 import

# main.py import example

輸出:

# 不會印 Hello,因為 __name__ 不是 "__main__"

💡 總結

  • __name__ 是系統屬性,表示「這個程式或模組是怎麼被使用的」。

  • 用兩個底線是 Python 的約定,表示這是系統定義的特殊屬性,不是你自己隨便取的變數 

 

沒有留言:

張貼留言