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

閱讀時間約 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 帳號,也會不定時的舉辦分享活動,一起來玩玩吧 ヽ(●´∀`●)ノ

    avatar-img
    7會員
    3內容數
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    張維元的沙龍 的其他內容
    在剛入行的時候曾經寫過一篇文章 「資料專案團隊組成」,當時把資料團隊根據技能分成資料科學家、資料分析師和資料工程師三種角色。不過在工作幾年之後,發現實務上的資料分工其實更細而且更複雜,也隱含了更多的可能性。這一篇文章將談談實務上的資料團隊分工。
    在剛入行的時候曾經寫過一篇文章 「資料專案團隊組成」,當時把資料團隊根據技能分成資料科學家、資料分析師和資料工程師三種角色。不過在工作幾年之後,發現實務上的資料分工其實更細而且更複雜,也隱含了更多的可能性。這一篇文章將談談實務上的資料團隊分工。
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    「在家沒有什麼不便,但我時常覺得匱乏,就好像夜幕降臨時,打開電燈開關的瞬間——原先隱匿的自我無所遁形,難以迴避。是侏儒照鏡的剎那,裂紋蜿蜒過身體。所有平時不願檢視的突然變得無比清晰,安安靜靜地矗立。那時候就會想,有雪的話多好啊,假如能在南方看到雪……」 ──林芸萱
    Thumbnail
    日前我在LOFTER看到這則私訊: 其實看到這則私訊我高興嗎?老實說我實在是高興不起來,甚至是有點生氣。所以我隔了幾天以後就這樣回應了。 至於這個讀者被我這樣回覆就氣炸了,覺得我這麼缺支持者還要罵他所以他覺得他不應該“支持”我所以就把我封鎖了。 那麼前情提要說完,我就來談談我對這種事情的看法。
    Thumbnail
    茶葉,你真的喝對了嗎? 中國的茶葉品種有很多,總共有六大茶類,而且每一年還有春茶,夏茶,秋茶,冬茶,這麼多的茶葉品類,普洱茶又有生茶和熟茶之分,茶友們到底應該怎麼去選擇呢?
    最近找到新工作了,也順利拿到Offer信,薪水差距大約是目前再加7k,對我來說幅度很大,內容也是我喜歡的,我拿到信的時候欣喜若狂,立馬跟主管提離職。很乾脆地,與長官們稍微談了一下離開的日期,就核准了。 我認為我工作的主管很不喜歡我,但我不知原因,這很糟糕。 具體來說他也沒對我做出「惡言相向」之類的明
    Thumbnail
    什麼叫做「那孩子呢?」去你媽的,原來你都知道,原來,只有我不知道,原來姊姊有努力過,如果她現在死了,很可能她到死前都在努力,我所盼望的,都被你阻擋下來,然後你說你是保護我,你是保護你自己吧。劇情進行到這個時候,你還要保護你自己,因為我到七、八十歲了,我才看到姊姊寫的那些信,等我老公死了,我才看到那些
    Thumbnail
    有陣子沒有分享美食了 今天立馬來更新「六張犁美食」 最近覺得六張犁真的是越來越多厲害小店了 ★井上禾食 ★鍋集院食膳鍋物 ★響初麵 ★甩泰咖哩專賣店
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    「在家沒有什麼不便,但我時常覺得匱乏,就好像夜幕降臨時,打開電燈開關的瞬間——原先隱匿的自我無所遁形,難以迴避。是侏儒照鏡的剎那,裂紋蜿蜒過身體。所有平時不願檢視的突然變得無比清晰,安安靜靜地矗立。那時候就會想,有雪的話多好啊,假如能在南方看到雪……」 ──林芸萱
    Thumbnail
    日前我在LOFTER看到這則私訊: 其實看到這則私訊我高興嗎?老實說我實在是高興不起來,甚至是有點生氣。所以我隔了幾天以後就這樣回應了。 至於這個讀者被我這樣回覆就氣炸了,覺得我這麼缺支持者還要罵他所以他覺得他不應該“支持”我所以就把我封鎖了。 那麼前情提要說完,我就來談談我對這種事情的看法。
    Thumbnail
    茶葉,你真的喝對了嗎? 中國的茶葉品種有很多,總共有六大茶類,而且每一年還有春茶,夏茶,秋茶,冬茶,這麼多的茶葉品類,普洱茶又有生茶和熟茶之分,茶友們到底應該怎麼去選擇呢?
    最近找到新工作了,也順利拿到Offer信,薪水差距大約是目前再加7k,對我來說幅度很大,內容也是我喜歡的,我拿到信的時候欣喜若狂,立馬跟主管提離職。很乾脆地,與長官們稍微談了一下離開的日期,就核准了。 我認為我工作的主管很不喜歡我,但我不知原因,這很糟糕。 具體來說他也沒對我做出「惡言相向」之類的明
    Thumbnail
    什麼叫做「那孩子呢?」去你媽的,原來你都知道,原來,只有我不知道,原來姊姊有努力過,如果她現在死了,很可能她到死前都在努力,我所盼望的,都被你阻擋下來,然後你說你是保護我,你是保護你自己吧。劇情進行到這個時候,你還要保護你自己,因為我到七、八十歲了,我才看到姊姊寫的那些信,等我老公死了,我才看到那些
    Thumbnail
    有陣子沒有分享美食了 今天立馬來更新「六張犁美食」 最近覺得六張犁真的是越來越多厲害小店了 ★井上禾食 ★鍋集院食膳鍋物 ★響初麵 ★甩泰咖哩專賣店