在網路爬蟲中,自動更新 headers 是一種常用的技術,
用於模擬不同的用戶請求,以避免被目標網站屏蔽或識別為機器人。
Headers 是 HTTP 請求中的重要部分,
它包含了關於客戶端(如瀏覽器或爬蟲)的各種信息,
如用戶代理(User-Agent)、接受的內容類型(Accept)、語言(Accept-Language)等。
例如,User-Agent 告訴伺服器請求是由哪種設備和瀏覽器發出的:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
如果 User-Agent 固定不變,伺服器可能判斷這是機器人的行為。
步驟 1:打開開發者工具
按 F12 鍵或右鍵點擊頁面,選擇 檢查(Inspect)來打開瀏覽器的開發者工具。
步驟 2:進入 Network 面板
在開發者工具中,切換到 Network 面板。這個面板顯示了所有網頁請求和回應的詳細資料。
步驟 3:查看網頁請求
確保你刷新了頁面(按 F5 或點擊刷新按鈕),以便捕獲所有請求。
步驟 4:選擇一個網頁請求
在 Network 面板中,你會看到很多請求項目。選擇一個請求(通常是網頁加載的第一個請求,或者是任何 API 請求)。
步驟 5:查看請求的 Headers
當選擇了一個請求後,會出現該請求的詳細信息。在右側的詳細信息窗格中,選擇 Headers 頁籤。
步驟 6:找到 User-Agent
在 Request Headers 部分,你會看到 User-Agent 標頭。這個標頭通常會顯示瀏覽器的詳細資訊,包含瀏覽器名稱、版本號、操作系統等等。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version
Google Chrome 131.0.6778.109
/Applications/Firefox.app/Contents/MacOS/firefox --version
import plistlib
import os
def get_chrome_version():
# Chrome 安裝路徑
chrome_info_plist = "/Applications/Google Chrome.app/Contents/Info.plist"
# 確保文件存在
if not os.path.exists(chrome_info_plist):
return "Google Chrome is not installed in the default path."
# 讀取 plist 文件
with open(chrome_info_plist, 'rb') as plist_file:
plist_data = plistlib.load(plist_file)
# 獲取版本號
version = plist_data.get('CFBundleShortVersionString', 'Unknown')
return f"Google Chrome Version: {version}"
# 呼叫函數
print(get_chrome_version())
記得選擇要運行的虛擬環境 > 在terminal運行python 檔名webCrawler.py
在某些版本的 Firefox 或某些安裝方式(例如從 Mac App Store 安裝的應用),application.ini 文件可能不再位於 /Applications/Firefox.app/Contents/MacOS 中。
解決方案
find /Applications/Firefox.app -name "application.ini"
/Applications/Firefox.app/Contents/Resources/application.ini
firefox_info_plist = "/Applications/Firefox.app/Contents/Info.plist"
with open(firefox_info_plist, "rb") as plist_file:
plist_data = plistlib.load(plist_file)
firefox_version = plist_data.get("CFBundleShortVersionString", "Unknown")
print(f"Firefox version: {firefox_version}")
在 macOS 的 VS Code 中使用 Python 腳本找到 Chrome 的版本後,並將其動態設置為 HTTP 請求 Header 中的 User-Agent:
headers = {
"User-Agent": user_agent}
# 使用更新後的 User-Agent 進行請求
url ='https://www.ptt.cc/bbs/index.html'
response = requests.get(url, headers=headers)
print(f"Response Status Code: {response.status_code}")
print(len(response.text))