爬蟲又被擋了怎麼辦?常見的反爬蟲處理策略

閱讀時間約 6 分鐘
資料爬蟲是資料分析的起手式,必須有好的、可用的資料才得以進行高品質的資料科學專案,爬蟲也是資料科學領域開發者的第一項挑戰。但是當你學完爬蟲的技術之後,開始真的跳入爬蟲世界之後會發現有網站其實沒有想像中好爬。當自動化的爬蟲技術越來越廣泛應用的同時,網站方也有一些「反爬蟲」的機制出現,讓開發者無法輕易的爬蟲所需的資料。今天這篇文章想跟大家分享的是當你的爬蟲程式又被擋了怎麼辦?常見的反爬蟲知識以及對應的克服反爬蟲處理策略有哪些。

什麼是惡意爬蟲?

程式擁有「執行速度」與「記憶儲存」這兩種特性,我們可以利用程式自動化的重複、大量執行指定的操作。網頁爬蟲即是用程式自動化實現收集來自於網頁中資料的一種場景,但若這個「自動化」太暴力時則可能會造成對方的網站受到影響,稱為「惡意機器人( Bat Bot )」。網頁爬蟲自動化收集的行為太暴力的情況下,可能會造成對方的網站受到影響,常見的惡意行為有以下幾種:
  • DoS 或 DDoS
  • 非人為的廣告點擊行為
  • 異常流量
  • 商業機密洩漏

常見的反爬蟲處理策略

因此,反爬蟲主要就是針對「惡意的爬蟲程式」設計的防堵機制,包含「系統負擔」與「資料洩漏」兩個角度。從「資料洩漏」的角度來看,許多網站為了保護資料、避免網頁上的公開資訊被網頁爬蟲給抓取,而出現了「反爬蟲」的機制出現。所謂「道高一尺,魔高一丈」,爬蟲工程師也發展了出一系列「反反爬蟲」的策略。換句話說,因此,我們在思考如何克服反爬蟲處理策略,其實背後思考的點是如何讓你的爬蟲不要踩到對方的線。常見的克服反爬蟲處理策有:
  • 瀏覽器標頭與基本資訊
  • 驗證碼處理
  • 模擬真實用戶登入授權
  • 使用代理伺服器與第三方IP
  • JavaScript 渲染的動態網頁

瀏覽器標頭與基本資訊

網頁的傳輸會根據 HTTP 協定將溝通分為「Request」和「Response」兩種角色:
其中 Request 當中的 Header(標頭檔)會由瀏覽器自動產生,包含跟發送方有關的資訊,例如「Host」、「User-Agent」.. 等等。
因此,許多網站會將 HTTP Header 視為是第一個檢查的方式,利用 Header 判斷來源是否合法。Header 會由瀏覽器自動產生,如果直接透過程式發出的請求預設是沒有 Header 的。

驗證碼處理

你在瀏覽網頁的時候,有看過這些驗證機制嗎?網頁驗證碼的專業術語稱為「CAPTCHA 」(全名是 Completely Automated Public Turing test to tell Computers and Humans Apart 自動判別電腦與人類的公開圖靈測試),是目前在網頁當中常見的一種驗證機制,用來判斷惡意的使用者干擾與攻擊。驗證碼機制是許多網站傳送資料的檢查機制,對於非人類操作與大量頻繁操作都有不錯的防範機制。
爬蟲在實作上遇到驗證碼的做法會是這樣,先把圖抓回來,再搭配圖形識別工具找出圖中的內容。之前也有寫過一篇針對滑動驗證碼的解法:「讓 Python 爬蟲也能讀得懂「滑動驗證碼」」,有興趣的朋友可以看一下。

模擬真實用戶登入授權

大部分網站都有權限管理機制,使用上也會有登入/登出的機制。但由於爬蟲多半是基於 HTTP Request /Response 一來一回的方式取資料。如果直接使用爬蟲程式的話,要如何模擬使用者登入的行為就會是一個挑戰。我們把「登入系統/會員機制」過程稱為「授權」,而在網站開發中的的授權做法有兩種:「token」跟「session/cookie」。
Token 類似 API 的方法,需要在每次請求的過程中也把你申請到的合法權杖(token)一起帶上。通常需要由開發者自己放在 Request 的 Headers 當中,讓對方可以判別你是一個合法登入的來源;Session/Cookie:第二種方法是網站會主動把權限判斷儲存在「瀏覽器當中的 cookie」,發出 Request 請求時會自動跟著請求一起發出去。

使用代理伺服器與第三方IP

當爬蟲程式大量存取特定網站時,網站方可以採用最直接的防護機制 - 封鎖 IP,直接透過底層的方式做屏蔽。這邊的解法我們會採用「代理伺服器(Proxy)」的概念來處理,所謂的代理伺服器即是透過一個第三方主機代為發送請求,因此對於網站方而言,他收到的請求是來自於第三方的。
這邊也提供一些免費的第三方代理伺服器:

JavaScript 渲染的動態網頁

最後一種是「JavaScript 渲染的動態網頁」,動態網頁是指網頁在瀏覽器取得 HTML 後,才透過 JavaScript 根據需求動態地取得資料更新 HTML 的一種技術。動態網頁與靜態網頁最大的不同是「網頁上的資料」是在什麼時間點取得產生的。因此,動態爬蟲程式必須針對這種動態更新資料的網頁調整,才有辦法取得真正的資料。
網頁的問題是因為利用 Python 攔截到的 Response 永遠會是還沒執行 JavaScript 前那個相對空白的畫面。動態網頁爬蟲可以利用「從模擬瀏覽器改成模擬使用者開啟瀏覽器」,藉由模擬的瀏覽器執行 JavaScript 拉回資料。

打造爬蟲是資料人的基本技能

過去的資料來源多半來自於公司內部的資料庫或資料倉儲系統,仰賴於工程師跟 IT 部門的支援。但隨著 Big Data 的技術到位,實務上對於資料的要求更加大量也更加多元。現在對於資料的使用者其實很廣泛,通常很多資料的需求也都是實現性的。這種情況下可能沒有那麼多的工程師或開發人力能夠隨時提供彈性的資料,因此打造資料收集力已經成為所有資料工作者的必備技能了。

Reference


嗨,你好,我是維元,持續在不同的平台發表對 #資料科學、 #網頁開發 或 #軟體職涯 相關的文章。如果對於內文有疑問都歡迎與我們進一步的交流,都可以追蹤我的 Facebook 粉專Instagram 帳號,也會不定時的舉辦分享活動,一起來玩玩吧 ヽ(●´∀`●)ノ

    7會員
    3內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    好像是少女,但又多了點什麼——林芸萱的十日記「在家沒有什麼不便,但我時常覺得匱乏,就好像夜幕降臨時,打開電燈開關的瞬間——原先隱匿的自我無所遁形,難以迴避。是侏儒照鏡的剎那,裂紋蜿蜒過身體。所有平時不願檢視的突然變得無比清晰,安安靜靜地矗立。那時候就會想,有雪的話多好啊,假如能在南方看到雪……」 ──林芸萱
    Thumbnail
    avatar
    註異文庫
    2021-06-16
    文章看了又怎樣?沒有明顯的支持都不是支持日前我在LOFTER看到這則私訊: 其實看到這則私訊我高興嗎?老實說我實在是高興不起來,甚至是有點生氣。所以我隔了幾天以後就這樣回應了。 至於這個讀者被我這樣回覆就氣炸了,覺得我這麼缺支持者還要罵他所以他覺得他不應該“支持”我所以就把我封鎖了。 那麼前情提要說完,我就來談談我對這種事情的看法。
    Thumbnail
    avatar
    空心二胡Hardiness不空心
    2021-05-12
    茶葉,你真的喝對了嗎?普洱茶又該怎麼選擇呢?茶葉,你真的喝對了嗎? 中國的茶葉品種有很多,總共有六大茶類,而且每一年還有春茶,夏茶,秋茶,冬茶,這麼多的茶葉品類,普洱茶又有生茶和熟茶之分,茶友們到底應該怎麼去選擇呢?
    Thumbnail
    avatar
    普洱茶|古樹茶 -香港中樂號
    2021-03-26
    都有新工作了又有什麼不滿?我是真的想換工作嗎|反思篇最近找到新工作了,也順利拿到Offer信,薪水差距大約是目前再加7k,對我來說幅度很大,內容也是我喜歡的,我拿到信的時候欣喜若狂,立馬跟主管提離職。很乾脆地,與長官們稍微談了一下離開的日期,就核准了。 我認為我工作的主管很不喜歡我,但我不知原因,這很糟糕。 具體來說他也沒對我做出「惡言相向」之類的明
    avatar
    重席
    2020-07-31
    電影|遺忘了誰,又,遺忘了什麼—〈被遺忘的人生〉什麼叫做「那孩子呢?」去你媽的,原來你都知道,原來,只有我不知道,原來姊姊有努力過,如果她現在死了,很可能她到死前都在努力,我所盼望的,都被你阻擋下來,然後你說你是保護我,你是保護你自己吧。劇情進行到這個時候,你還要保護你自己,因為我到七、八十歲了,我才看到姊姊寫的那些信,等我老公死了,我才看到那些
    Thumbnail
    avatar
    Quuut
    2020-07-10
    六張犁美食分享! 什麼~又有新的咖哩可以吃了~!!火鍋/咖哩/海鮮井有陣子沒有分享美食了 今天立馬來更新「六張犁美食」 最近覺得六張犁真的是越來越多厲害小店了 ★井上禾食 ★鍋集院食膳鍋物 ★響初麵 ★甩泰咖哩專賣店
    Thumbnail
    avatar
    馬它mata x
    2020-04-14