iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
Software Development

Python 爬蟲這樣學,一定是大拇指拉!系列 第 24

[Python 爬蟲這樣學,一定是大拇指拉!] DAY24 - 實戰演練:偽裝

偽裝

偽裝!?爬蟲還要偽裝喔?

是的,不知道各位還記不記得在"關於爬蟲"有提到過:

  • 爬蟲存取網站的過程會消耗目標系統資源。
  • 不少網路系統並不默許爬蟲工作。

因為以上原因,很多網站都會把爬蟲拒之門外,就是為了保護自己的 Server。那我們要怎麼讓程式像一個瀏覽器呢?
其實很簡單!我們先看這篇在 ithelp 的提問:

關於Python使用requests的爬蟲問題

看完文章後,可以知道一般 HTTP Method 為 Get 且不用特別登入的網站,被擋下來的話,問題通常是出在 Headers 中的 User-Agent。而 User-Agent 就是用來告訴 Server,連線過來的 Client 是什麼瀏覽器、OS 等。

那為什麼 Python 會被擋掉?我們來檢查一下 Python 的預設 Header 是什麼。

import requests

res = requests.get("https://www.google.com/")
print(res.request.headers)
# {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

預設的 User-Agent 是 python-requests/2.25.1,直接不演的告訴 Server 我們是 Python 拉!/images/emoticon/emoticon37.gif

所以我們送 Request 前,得要帶入像瀏覽器的 User-agent。
方法有兩種:

  1. 直接複製自己瀏覽器的 User-agent 拿來用。
  2. 使用 fake-useragent 套件:
    可以從 useragentstring.com 抓取最新的 User-Agent 來使用,或是根據現實世界統計的瀏覽器使用頻率來隨機產生 User-Agent。
from fake_useragent import UserAgent
ua = UserAgent()

# 不同瀏覽器的 User-Agent
ua.ie
ue.google
ua.firefox
ua.safari

# 隨機產生
ua.random

套用到程式的 Header 中:

import requests
from fake_useragent import UserAgent

ua = UserAgent()

res = requests.get("https://www.google.com/", headers={
    "User-Agent": ua.random
})

以上就是基本的爬蟲偽裝。
再進階一點的可能就是要自己做 cookie 之類的,會稍微複雜一點點,但概念跟 Headers 類似,由於本系列是以基礎為主,所以這邊就先不討論了,有興趣的讀者可以自己 google 看看囉。/images/emoticon/emoticon12.gif


上一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY23 - 實戰演練:HTML Response - 抓取股票代碼清單 (2)
下一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY25 - 實戰演練:關於多執行緒
系列文
Python 爬蟲這樣學,一定是大拇指拉!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言