🔹 範例:用物件導向抓取網頁資料,並用 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() # 顯示結果 🔹 範例解析
物件導向
WebScraper 是一個類別,封裝了抓取、解析和顯示的方法。
每個爬蟲物件都可以有自己的 url 和 data。
Dict 使用
self.data 是字典,用來存放抓取結果,可以靈活擴展,例如增加 author, date, links 等資料欄位。
網路爬蟲
用 requests 抓取網頁內容
用 BeautifulSoup 解析 HTML
🔹 __name__ 的意思
底線的意義
Python 中 __xxx__ 這種命名方式稱為 魔術方法 / 魔術屬性(Magic Method / Dunder,Double UNDERSCORE)。
它們通常由 Python 系統自動使用,用來控制某些特殊行為或提供系統訊息。
每個 Python 模組都有 __name__ 這個屬性,表示這個模組的名稱。
重要的判斷:
if __name__ == "__main__":
# 當前程式被直接執行時,這段程式才會跑
__name__ == "__main__" 的意思:
「這個模組是直接被 Python 執行的,而不是被別的模組 import 的」
如果這個模組是被別的程式 import,__name__ 就會是模組名稱,而不是 "__main__"
🔹 舉例
檔案 example.py:
def say_hello():
print("Hello")
if __name__ == "__main__":
say_hello()
直接執行
python example.py
輸出:
Hello
被別的模組 import
# main.py
import example
輸出:
# 不會印 Hello,因為 __name__ 不是 "__main__"
💡 總結
__name__ 是系統屬性,表示「這個程式或模組是怎麼被使用的」。
用兩個底線是 Python 的約定,表示這是系統定義的特殊屬性,不是你自己隨便取的變數
沒有留言:
張貼留言