如果對 python 爬蟲不了解可以先看這篇 Python 爬蟲基礎介紹0
開啟命令提示字元:
1.在 Windows 系統中,可以按下 Win + R 鍵,輸入 cmd,然後按 Enter 鍵來打開命令提示字元。
2.安裝必要函式庫:如果顯示版本號,則表示已安裝
- 確認是否已安裝pip3 --version
- 使用 pip3 install requests
安裝 requests 庫。
- 確認是否已安裝pip show beautifulsoup4
- 使用 pip3 install beautifulsoup4
安裝 BeautifulSoup4 庫。from bs4 import BeautifulSoup print(BeautifulSoup) #<class 'bs4.BeautifulSoup'>
requests
庫可以輕鬆發送 HTTP 請求。以下是使用 requests 庫發送 GET 請求的基本步驟,並以 PTT 的熱門文章頁面為例進行示範。import requests
url = 'https://www.ptt.cc/bbs/index.html'
response = requests.get(url)
print(response.text)
3.檢查響應狀態碼:
在處理響應之前,檢查請求是否成功。HTTP 狀態碼 200 表示請求成功
if response.status_code == 200:
print("成功獲取網頁內容")
else:
print(f"請求失敗,狀態碼:{response.status_code}")
html_content = response.text
print(html_content)
#會print出整個網頁的html程式碼
from bs4 import BeautifulSoup
4-2.解析 HTML 內容:
使用 BeautifulSoup 對獲取的 HTML 內容進行解析。
soup = BeautifulSoup(response.text, 'html.parser')
4-3.提取熱門文章標題和連結:
使用 CSS 選擇器提取文章標題和連結。以下是提取標題的範例:
titles = soup.find_all('div',class_="board-title")
for title in titles:
print(title.text)
完整範例代碼
import requests
from bs4 import BeautifulSoup
# print(BeautifulSoup)
url = 'https://www.ptt.cc/bbs/index.html'
response = requests.get(url)
# 檢查回應狀態碼是否為 200
if response.status_code == 200:
print("成功獲取網頁內容")
else:
print(f"請求失敗,狀態碼:{response.status_code}")
soup = BeautifulSoup(response.text, 'html.parser')
titles = soup.find_all('div',class_="board-title")
for title in titles:
print(title.text)
url = "https://www.ptt.cc/bbs/MobileComm/index.html"
# 自訂 headers,模仿瀏覽器的 User-Agent
headers = {
'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'
}
# 傳送帶有 headers 的請求
response = requests.get(url, headers=headers)
# 檢查回應狀態碼是否為 200
if response.status_code == 200:
# 使用 BeautifulSoup 解析網頁
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有標題的連結
titles = soup.select("div.title a")
for title in titles:
print(title['href'], title.text)
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
(尤其是 User-Agent 和其他 header)通常是為了避免被網站的反爬蟲機制識別和封鎖。
許多網站會檢查進入的請求,並嘗試識別是否來自機器人或自動化腳本。
這些網站通常會根據以下一些原因封鎖或限制自動化請求:
偽裝 User-Agent 或其他 headers 是為了讓自動化工具看起來像是來自正常的用戶,從而避免被識別為爬蟲。
提高成功率:
有些網站對爬蟲的請求會給出 403 Forbidden 或 503 Service Unavailable 等錯誤,導致無法成功抓取資料。偽裝成瀏覽器的請求,可以避免這些限制,讓請求更容易成功。許多網站可能會允許瀏覽器進行爬取,但阻止自動化腳本的訪問,因此模擬瀏覽器行為是一種有效的方法。
避免 IP 被封禁:
如果一個網站發現短時間內來自同一個 IP 的大量請求,並且這些請求的 header 看起來像是自動化的(例如,User-Agent 是 Python 爬蟲的預設值),它有可能將該 IP 封禁。偽裝 header 可以減少這樣的風險,從而避免 IP 被封鎖。
模擬正常使用者行為:
偽裝成正常的瀏覽器請求不僅能避開反爬蟲機制,還能模擬真正的使用者行為,這對於某些需要模擬使用者交互的情況很有用。例如,有些網站可能會根據不同的 User-Agent 做出不同的回應(如行動版與桌面版網站呈現不同的頁面),所以模擬正確的 User-Agent 可以確保爬取到正確的頁面。
網站限制不同裝置的流量:
有些網站會根據請求中的 User-Agent 來判斷該請求來自哪種裝置(例如桌面或行動裝置)。這樣,爬蟲也可以根據需要調整自己的請求,以適應不同版本的頁面。
範例:
假設你要爬取某個網站的資料,並且該網站有反爬蟲機制,若你不偽裝請求,網站可能會返回 403 或 503 錯誤,或者限制你的訪問。通過偽裝請求,你可以讓網站認為你是一個正常的瀏覽器使用者,從而順利獲取資料。
結論:
偽裝 HTTP headers 是為了模擬正常使用者的行為,避開網站的反爬蟲檢測,並提高自動化腳本的成功率。這樣可以讓爬蟲更順利地抓取資料,並避免被網站封禁或限制流量。
偽裝爬蟲需要注意請求數量、請求間隔和偽裝行為,並採用分步調試的開發流程,避免被伺服器封鎖。同時要遵守網站的爬取規則和使用條款(如 robots.txt)。
進階環境準備:
Python 虛擬環境 Anaconda 安裝處理套件指令
進階爬蟲技巧:
Python 爬蟲模組 pandas、requests 和 Selenium
Python 爬蟲定位