1. 網頁爬蟲限制的介紹
今天我們要討論一個很有趣的話題——如何繞過網頁爬蟲的限制。每個對爬蟲感興趣的程式設計師,遲早都會遇到網頁設下的限制和封鎖。是時候來了解如何作為正派人士,不被網站的防護系統抓到,並繼續收集數據而不觸怒伺服器。
當你對網站發送請求時,本質上你是在進入他們的私人領域以獲取他們努力保護的數據。但為什麼網站要設置障礙呢?原因可能多種多樣,例如保護著作權、確保伺服器的可靠性和性能、防止未經授權的數據使用。如果你消耗了太多的網站資源或者違反了他們的規則,那麼你可能會...被封鎖。而且除了伺服器管理員,大概沒有人喜歡被封鎖吧。
2. 設定 user-agent
什麼是 user-agent
?
User-agent 是一個識別字串,會隨每個 HTTP 請求一起從你的瀏覽器發送到伺服器。它告訴伺服器你使用的是什麼瀏覽器和操作系統。而且你知道嗎?這個 user-agent
很容易就可以偽裝,讓伺服器以為你是在用最新的 iPhone,而不是用 Python 腳本在寫程式的空檔偷跑去抓數據。
更改 user-agent
的範例
在 requests
庫中更改 user-agent
非常簡單。來看個小範例:
import requests
url = "https://example.com"
# 將 user-agent 設為 Chrome 瀏覽器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.content)
偽裝 user-agent
有點像穿著熊貓裝參加派對。外觀看起來不一樣,但其實還是你。伺服器看到一個“瀏覽器”而不是“腳本”時,可能就會讓你進派對了。
3. 使用 cookies
什麼是 cookies?
Cookies 是一些小數據片段,網站會儲存在你的瀏覽器裡。它們可能包含各種資訊,從網站的設定到會話 ID,這些會話 ID 可以讓你登入後保持在線狀態。
在請求中使用 cookies
在 requests
中使用 cookies 也很簡單。通常你會在第一次向網站發送請求時獲取 cookies,然後在後續請求中使用它們:
# 建立一個 session 來保持 cookies
session = requests.Session()
# 執行第一次請求以獲取 cookies
session.get(url)
# 在後續請求中使用相同的 cookies
response = session.get(url)
print(response.content)
Session 就像是 cookies 的公車,它們會隨著你從一個網站到另一個網站,保留你的設定。
4. 避免封鎖的方法
降低被封鎖的概率的實用技巧
以下是一些小妙招:
- 請求之間的延遲: 添加隨機延遲,避免讓伺服器懷疑你是機器人。
- 更換 IP 地址: 使用 VPN 或代理伺服器更換 IP 地址,避免因 IP 被封鎖。
- 輪換
user-agent
: 每次請求更改user-agent
,讓你看起來像不同的瀏覽器。
添加延遲和更改 IP 地址的範例
使用 time
庫添加延遲:
import time
import random
for _ in range(10):
response = session.get(url)
# 隨機延遲
time.sleep(random.uniform(1, 3))
在 requests
中使用代理來更改 IP 地址:
proxies = {
"http": "http://10.10.10.10:8000",
"https": "https://10.10.10.10:8000",
}
response = requests.get(url, proxies=proxies)
5. 其他欺騙方法
為了讓你的腳本看起來不那麼可疑,使用 headers
和 cookies
模擬一個真正的用戶。記住:真實性是你對抗封鎖的秘密武器。
今天的課程到此結束。學會了這些技巧,你將能避免在網站的雷達上“閃亮登場”,並繼續無阻地收集寶貴的數據。記住,就像任何超級英雄一樣,你也有責任——請在道德和法律的框架內使用這些技巧!相信自己,讓你的程式碼優雅得像貓在鍵盤上跳舞一樣!
GO TO FULL VERSION