最全的 Python 反爬蟲及應對方案!

2021-01-09 高教幫

爬蟲是 Python 的一個常見應用場景,很多練習項目就是讓大家去爬某某網站。爬取網頁的時候,你大概率會碰到一些反爬措施。這種情況下,你該如何應對呢?本文梳理了常見的反爬措施和應對方案。 1. 通過User-Agent來控制訪問無論是瀏覽器還是爬蟲程序,在向伺服器發起網絡請求的時候,都會發過去一個頭文件:headers,比如知乎的requests headers。這裡面的大多數的欄位都是瀏覽器向服務表明身份用的對於爬蟲程序來說,最需要注意的欄位就是:User-Agent很多網站都會建立user-agent白名單,只有屬於正常範圍的user-agent才能夠正常訪問。解決方法:可以自己設置一下user-agent,或者更好的是,可以從一系列的user-agent裡隨機挑出一個符合標準的使用。實現難度:★ 2. IP限制如果一個固定的ip在短暫的時間內,快速大量的訪問一個網站,後臺管理員可以編寫IP限制,不讓該IP繼續訪問。解決方法:比較成熟的方式是:IP代理池img簡單的說,就是通過ip代理,從不同的ip進行訪問,這樣就不會被封掉ip了。可是ip代理的獲取本身就是一個很麻煩的事情,網上有免費和付費的,但是質量都層次不齊。如果是企業裡需要的話,可以通過自己購買集群雲服務來自建代理池。實現難度:★ 3. SESSION訪問限制後臺統計登錄用戶的操作,比如短時間的點擊事件,請求數據事件,與正常值比對,用於區分用戶是否處理異常狀態,如果是,則限制登錄用戶操作權限。缺點:需要增加數據埋點功能,閾值設置不好,容易造成誤操作。解決方法:註冊多個帳號、模擬正常操作。實現難度:★★★ 4. Spider Trap蜘蛛陷阱導致網絡爬蟲進入無限循環之類的東西,這會浪費蜘蛛的資源,降低其生產力,並且在編寫得不好的爬蟲的情況下,可能導致程序崩潰。禮貌蜘蛛在不同主機之間交替請求,並且不會每隔幾秒鐘從同一伺服器請求多次文檔,這意味著「禮貌」網絡爬蟲比「不禮貌」爬蟲的影響程度要小得多。反爬方式:創建無限深度的目錄結構HTTP://example.com/bar/foo/bar/foo/bar/foo/bar /動態頁面,為網絡爬蟲生成無限數量的文檔。如由算法生成雜亂的文章頁面。文檔中填充了大量字符,使解析文檔的詞法分析器崩潰。此外,帶蜘蛛陷阱的網站通常都有robots.txt告訴機器人不要進入陷阱,因此合法的「禮貌」機器人不會陷入陷阱,而忽視robots.txt設置的「不禮貌」機器人會受到陷阱的影響。解決方法:把網頁按照所引用的css文件進行聚類,通過控制類裡最大能包含的網頁數量防止爬蟲進入trap後出不來,對不含css的網頁會給一個penalty,限制它能產生的連結數量。這個辦法理論上不保證能避免爬蟲陷入死循環,但是實際上這個方案工作得挺好,因為絕大多數網頁都使用了css,動態網頁更是如此。缺點:反爬方式1,2會增加很多無用目錄或文件,造成資源浪費,也對正常的SEO十分不友好,可能會被懲罰。實現難度:★★★ 5. 驗證碼驗證碼是一種區分用戶是計算機還是人的公共全自動程序。可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多網站通行的方式.圖片驗證碼複雜型打碼平臺僱傭了人力,專門幫人識別驗證碼。識別完把結果傳回去。總共的過程用不了幾秒時間。這樣的打碼平臺還有記憶功能。圖片被識別為「鍋鏟」之後,那麼下次這張圖片再出現的時候,系統就直接判斷它是「鍋鏟」。時間一長,圖片驗證碼伺服器裡的圖片就被標記完了,機器就能自動識別了。簡單型上面兩個不用處理直接可以用OCR識別技術(利用python第三方庫--esserocr)來識別。經過灰度變換和二值化後,由模糊的驗證碼背景變成清晰可見的驗證碼。容易迷惑人的圖片驗證碼對於在這種驗證碼,語言一般自帶圖形庫,添加上扭曲就成了這個樣子,我們可以利用9萬張圖片進行訓練,完成類似人的精準度,到達識別驗證碼的效果簡訊驗證碼用ebbrowser術,模擬用戶打開簡訊的行為,最終獲取簡訊驗證碼。計算題圖片驗證碼把所有可能出現的漢字都人工取出來,保存為黑白圖片,把驗證碼按照字體顏色二值化,去除噪點,然後將所有圖片依次與之進行像素對比,計算出相似值,找到最像的那張圖片滑動驗證碼對於滑動驗證碼我們可以利用圖片的像素作為線索,確定好基本屬性值,查看位置的差值,對於差值超過基本屬性值,我們就可以確定圖片的大概位置。圖案驗證碼對於這種每次拖動的順序不一樣,結果就不一樣,我們怎麼做來識別呢?利用機器學習所有的拖動順序,利用1萬張圖片進行訓練,完成類似人的操作,最終將其識別利用selenium技術來模擬人的拖動順序,窮盡所有拖動方式,這樣達到是別的效果標記倒立文字驗證碼我們不妨分析下:對於漢字而言,有中華五千年龐大的文字庫,加上文字的不同字體、文字的扭曲和噪點,難度更大了。方法:首先點擊前兩個倒立的文字,可確定7個文字的坐標, 驗證碼中7個漢字的位置是確定的,只需要提前確認每個字所在的坐標並將其放入列表中,然後人工確定倒立文字的文字序號,將列表中序號對應的坐標即可實現成功登錄。解決方法:接入第三方驗證碼平臺,實時破解網站的驗證碼。缺點:影響正常的用戶體驗操作,驗證碼越複雜,網站體驗感越差。實現難度:★★ 6. 通過robots.txt來限制爬蟲robots.txt(統一小寫)是一種存放於網站根目錄下的ASCII編碼的文本文件,它通常告訴網絡搜尋引擎的漫遊器(又稱網絡蜘蛛),此網站中的哪些內容是不應被搜尋引擎的漫遊器獲取的,哪些是可以被漫遊器獲取的。robots.txt協議並不是一個規範,而只是約定俗成的,所以並不能保證網站的隱私。注意robots.txt是用字符串比較來確定是否獲取URL,所以目錄末尾有與沒有斜槓「/」表示的是不同的URL。缺點:只是一個君子協議,對於良好的爬蟲比如搜尋引擎有效果,對於有目的性的爬蟲不起作用解決方法:如果使用scrapy框架,只需將settings文件裡的ROBOTSTXT_OBEY設置值為 False實現難度:★ 7. 數據動態加載python的requests庫只能爬取靜態頁面,爬取不了動態加載的頁面。使用JS加載數據方式,能提高爬蟲門檻。解決方法:抓包獲取數據url通過抓包方式可以獲取數據的請求url,再通過分析和更改url參數來進行數據的抓取。示例:看https://image.baidu.com這部分的包。可以看到,這部分包裡面,search下面的那個 url和我們訪問的地址完全是一樣的,但是它的response卻包含了js代碼。當在動物圖片首頁往下滑動頁面,想看到更多的時候,更多的包出現了。從圖片可以看到,下滑頁面後得到的是一連串json數據。在data裡面,可以看到thumbURL等字樣。它的值是一個url。這個就是圖片的連結。打開一個瀏覽器頁面,訪問thumbURL="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1968180540,4118301545&fm=27&gp=0.jpg" 發現搜索結果裡的圖片。根據前面的分析,就可以知道,請求URL="https://image.baidu.com/search/acjsontn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&cl=2&lm=-1&ie=utf8&oe=utf8&adpicid=&st=-1&z=&ic=0&word=%E5%8A%A8%E7%89%A9%E5%9B%BE%E7%89%87&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn=30&rn=30&gsm=1e&1531038037275="用瀏覽器訪問這個連結確定他是公開的。最後就可以尋找URL的規律,對URL進行構造便可獲取所有照片。使用selenium通過使用selenium來實現模擬用戶操作瀏覽器,然後結合BeautifulSoup等包來解析網頁通過這種方法獲取數據,簡單,也比較直觀,缺點是速度比較慢。缺點:如果數據API沒做加密處理,容易曝光接口,讓爬蟲用戶更容易獲取數據。實現難度:★ 8. 數據加密-使用加密算法前端加密通過對查詢參數、user-agent、驗證碼、cookie等前端數據進行加密生成一串加密指令,將加密指令作為參數,再進行伺服器數據請求。該加密參數為空或者錯誤,伺服器都不對請求進行響應。伺服器端加密在伺服器端同樣有一段加密邏輯,生成一串編碼,與請求的編碼進行匹配,匹配通過則會返回數據。解決方法:JS加密破解方式,就是要找到JS的加密代碼,然後使用第三方庫js2py在Python中運行JS代碼,從而得到相應的編碼。案例參考:https://blog.csdn.net/lsh19950928/article/details/81585881缺點:加密算法明文寫在JS裡,爬蟲用戶還是可以分析出來。實現難度:★★★ 9. 數據加密-使用字體文件映射伺服器端根據字體映射文件先將客戶端查詢的數據進行變換再傳回前端,前端根據字體文件進行逆向解密。映射方式可以是數字亂序顯示,這樣爬蟲可以爬取數據,但是數據是錯誤的。破解方式:其實,如果能看懂JS代碼,這樣的方式還是很容易破解的,所以需要做以下幾個操作來加大破解難度。對JS加密使用多個不同的字體文件,然後約定使用指定字體文件方式,比如時間戳取模,這樣每次爬取到的數據映射方式都不一樣,映射結果就不一樣,極大提高了破解的難度。該種方式相比使用加密算法方式難度更高,因為加密算法是固定的幾種,對方很容易獲取並破解,而字體文件映射可以按任意規則映射,正常的數據使之錯誤顯示,爬蟲不容易察覺。參考案例:https://www.jianshu.com/p/f79d8e674768缺點:需要生成字體文件,增加網站加載資源的體量。實現難度:★★★★ 10. 非可視區域遮擋此方式主要針對使用senlium進行的爬蟲,如果模擬界面未進入可視區域,則對未見數據進行遮擋,防止senlium的click()操作。這種方式只能稍稍降低爬蟲的爬取速度,並不能阻止繼續進行數據爬取。實現難度:★來源:網際網路摘抄END

相關焦點

  • Python破解反爬蟲:最新反爬蟲有道翻譯中英文互譯破解,附代碼
    由於爬蟲的出現,導致很多網頁都設置了反爬蟲機制:常見的反爬蟲機制就是在客戶端發出請求的時候,在請求的內容中新增一些內容,而這些內容都是經過「加密的」,每次請求都是不同的,這樣就導致了很多傳統的爬蟲失效。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    VBA基礎 17原創獨家配套筆記之好玩DIY 18原創獨家配套筆記之混合開發實戰運用 19自動辦公難題 無api接口庫解決方案 20 獨家前沿用實力說話 21自動辦公實用tips python自動發送郵件 5機器學習與人工智慧 1歡迎來到python3玩轉機器學習 2機器學習基礎
  • Python爬蟲和反爬蟲的鬥爭
    在抓取對方網站、APP 應用的相關數據時,經常會遇到一系列的方法阻止爬蟲。網站APP們這麼做的原因,一是為了保證服務的質量,降低伺服器負載,二是為了保護數據不被獲取。爬蟲與反爬蟲的鬥爭經久不衰,這裡神龍IP給大家分享一些常見的反爬蟲手段。
  • python開發爬蟲有門檻嗎?
    如果你不是科班出身,沒有開發經驗,初次接觸開發爬蟲這檔子事兒,相信這篇文章能幫到你。python開發爬蟲肯定是有門檻的。儘管python很簡單,上手不難,但是開發起來你會發現,開發爬蟲不只是單單會python就可以了,你還得需要下列這些技能。
  • python爬蟲-urllib、urllib2、requests三者關係
    抓取始終是一個很大的需求,小到單個頁面,某個站點,大到搜尋引擎(百度、谷歌)的全網抓取。只要人能看到的東西,理論上都是爬蟲可以獲取的。不論靜態頁面還是動態頁面。也不論pc端的頁面還是移動端的app。話有點大,但這就是本系列的目的。
  • 幾個複雜的反爬蟲策略和應對方法
    自網際網路不斷發展以來,爬蟲與反爬蟲的戰爭從未停歇。今天天啟IP給大家分享幾個複雜的反爬蟲策略,一起來看看吧~ 幾個複雜的反爬蟲策略和應對方法
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。開發環境:Win7+Python 2.7 64bit+PyCharm :環境配置方法自行百度推薦的python爬蟲學習書籍1.米切爾 (Ryan Mitchell) (作者), 陶俊傑 (譯者), 陳小莉 (譯者)的Python網絡數據採集2
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 簡單爬蟲架構 開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    想要入門Python 爬蟲首先需要解決四個問題:1.熟悉python編程2.了解HTML3.了解網絡爬蟲的基本原理4.學習使用python爬蟲庫1、熟悉python編程剛開始入門爬蟲,初學者無需學習python的類,多線程,模塊和其他稍微困難的內容。
  • Python 爬蟲面試題 170 道
    59.python 字典和 json 字符串相互轉化方法60.請寫一個 Python 邏輯,計算一個文件中的大寫字母數量61. 請寫一段 Python連接 Mongo 資料庫,然後的查詢代碼。62.說一說 Redis 的基本類型。
  • 網站反爬蟲常見方法
    網站為了正常運營,通常會設置各種反爬機制,讓爬蟲知難而退。今天神龍代理IP就給大家盤點一下網站常見的反爬蟲機制。網站反爬蟲常見方法1.通過UA判定UA即User Agent,它是請求瀏覽器的身份標誌。反爬蟲機制通過判定訪問請求的頭部中沒有帶UA來識別爬蟲,這種判定方法很低級,通常不會將其作為唯一的判定標準,因為反反爬蟲非常容易,隨機數UA即可針對。2.通過Cookie判定Cookie就是指會員制的帳號密碼登錄驗證,通過分辨這一個帳號在短期內內爬取頻次來判定。這種方法的反反爬蟲也很費勁,需選用多帳戶的方法來爬取。
  • Python,爬蟲開發的不二選擇
    如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛,沿著網絡抓取自己的獵物(數據)。爬蟲指的是:向網站發起請求,獲取資源後分析並提取有用數據的程序。如今,人類社會已經進入了大數據時代,如何高效的獲取數據,已經成了各個網際網路公司的技術研發重點,掌握爬蟲技術已經成為了大數據公司技術人員不可或缺的一項技能。
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • Python新手爬蟲,簡單製作抓取廖雪峰的教程的小爬蟲
    Python 數據處理 Python編程從入門到實踐 核心編程基礎教程 網絡爬蟲入門書籍 python視頻編程從入門到精通 程序設計教材人民郵電¥72.2領3元券話不多說,先來看看整個爬蟲過程吧!目標:廖雪峰官網—python教程工具:pycharm、python3.6、requests庫、time庫、lxml庫思路:85 抓取所有的目錄章節 url85 找到 url內教程主體所在的 div85 遍歷 div下所有標籤,文本和代碼部分內容直接保存85 區分其中的代碼、圖片、視頻 3個內容,
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • 從零開始寫Python爬蟲,四大工具你值得擁有!
    如果你正在學習編程,那麼「爬蟲」絕對是你不可忽視的。那麼,學習python爬蟲之前需要哪些準備?一顆熱愛學習,不屈不撓的心一臺有鍵盤的電腦(什麼系統都行。我用的os x,所以例子會以這個為準)html相關的一些知識。
  • Python 爬蟲面試題 170 道:2019 版
    一個是有些部分還是 Python2 的代碼,另一個就是回答的很簡單,有些關鍵的題目,也沒有點出為什麼,最重要的是還有一些複製粘貼根本就跑不通,這種相信大家深有體會吧,這樣就導致我們可能需要去找其他人發的類似的教程。
  • 雲立方網科普:常用高效的Python爬蟲框架有哪些?
    Python是現在非常流行的程式語言,而爬蟲則是Python語言中最典型的應用,下面是總結的高效Python爬蟲框架,大家看看是否都用過呢。 Pyspider 是一個用python實現的功能強大的網絡爬蟲系統,能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,後端使用常用的資料庫進行爬取結果的存儲,還能定時設置任務與任務優先級等。