簡稱 UA,會讓服務器了解發送請求的客戶端的操作系統之類的訊息,在爬蟲時就是表明身分的概念
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
解析上方 :
Mozilla/5.0
: 通常都是這個開頭(可以是 5.0 或 4.0–4.0是很古早的)Windows NT 10.0
: window 10 系統Win64; x64
: x64 版瀏覽器在 x64 版 Windows 上執行AppleWebKit/537.36
: 瀏覽器內核KHTML
: HTML 排版引擎like Gecko
: 不是 Geckeo 瀏覽器,但是運行的像 Geckeo 瀏覽器Chrome/119.0.0.0
: Chrome 的版本Safari/537.36
: 因為 AppleWebKit 渲染引擎是 Apple 開發的,而Google 採用它,為了獲得伺服器端的正確回應,就進行偽裝以下是常見的 UA 範例 :
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
執行以下步驟 :
F12
web
裡面 header
往下滑會找到 User-Agent
這是自己電腦的定位
可以用 https://www.whatismyip.com.tw/ 來看自己目前的 IP
假設在爬蟲時不想給別人得知自己的 IP
可以使用下面的方法更改 IP :
最推薦的當然還是 VPN,但大多數都要收費
這是可以獲取隨機 IP 的程式碼
雖然能順利執行,但似乎沒辦法使用它提供的 IP 進行爬蟲
https://github.com/Python3WebSpider/ProxyPool
或是也可以使用現成的網站,但要登入之類的,不過也是免費
Scrapingdog:https://www.scrapingdog.com/
資安小補充
如果只是單純更改自己的 IP 其實對於黑客來說還是有辦法得知你的真實 IP
所以有些黑客會使用更多的 IP 進行跳板
但太多的跳板可能會使連線非常緩慢
所以通常會用 3 - 5 個 IP 當作跳板
紅方(攻擊者) 通常會在跳板中加入路由器或 Cisco 的產品
這樣在攻擊之後可以把日誌清除掉
這樣藍方(防守方)在追蹤的時候就會找不到登陸的 IP
實現斷點
如果都是使用主機的話有機會被恢復日誌找回真實 IP
資料來源 :
https://www.datarecovery.com.tw/news/hardware/2010-10-31/792.html
先下載這個套件
pip install fake_useragent
補充 :
假設下載了套件但執行時無法使用
請先在網路上找到 fake_useragent 的 .json 檔
接著改成裝在這個路徑當中
"C:\Users\ACER\AppData\Local\Temp\"
應該就可以使用了
然後就可以使用這個套件獲取到隨機的 UA 了
from fake_useragent import UserAgent
ua = UserAgent()
# Get a random browser user-agent string
print(ua.random)
其實還可以有更多用法
可以從網路上找尋
得到 UA 後
就是要讓我們爬蟲時送出的請求包含我們隨機產生的 UA
url = 'https://www.google.com/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'}
response = get(url, headers=headers)
html_doc = response.text
在 headers 當中其實還可以包含更多可以設定的參數
像是 accept 之類的
如果有必要可以視情況加入
補充–Referer :
假設遇到一些圖片之類的沒辦法直接爬取
這時可以在 headers 當中加入 'Referer':'…'
'Referer' 當中就是放入一個網站
這個網站就是我們要偽造請求的網站
像是爬圖片的話就可以放入這個圖片的主頁面的網址
補充–Proxy :
這是可以更改發送請求的 IP
下面是舉例
# set ip and port
proxy = "94.181.174.77:4153"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server={proxy}')
driver = webdriver.Chrome(service = s, options=chrome_options)
除此之外,也可以設定延遲時間讓網站不會判斷是自動程式
time.sleep(2) # 延遲 2 秒