13161216443

您所在位置: 首頁> 學習課程> Python常見面試題:爬蟲和數據庫部分

Python常見面試題:爬蟲和數據庫部分

發布百知教育 來源:學習課程 2019-08-20

常見的反爬蟲和應對方法?


1). 通過Headers反爬蟲


從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中;或者將Referer值修改為目標網站域名。對于檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。


2). 基于用戶行為反爬蟲


還有一部分網站是通過檢測用戶行為,例如同一 IP 短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。


大多數網站都是前一種情況,對于這種情況,使用 IP 代理就可以解決??梢詫iT寫一個爬蟲,爬取網上公開的代理 ip,檢測后全部保存起來。這樣的代理 ip 爬蟲經常會用到,最好自己準備一個。有了大量代理ip后可以每請求幾次更換一個 ip,這在requests 或者 urllib2 中很容易做到,這樣就能很容易的繞過第一種反爬蟲。


對于第二種情況,可以在每次請求后隨機間隔幾秒再進行下一次請求。有些有邏輯漏洞的網站,可以通過請求幾次,退出登錄,重新登錄,繼續請求來繞過同一賬號短時間內不能多次進行相同請求的限制。


3). 動態頁面的反爬蟲


上述的幾種情況大多都是出現在靜態頁面,還有一部分網站,我們需要爬取的數據是通過 ajax 請求得到,或者通過 JavaScript 生成的。首先用 Fiddler 對網絡請求進行分析。如果能夠找到 ajax 請求,也能分析出具體的參數和響應的具體含義,我們就能采用上面的方法,直接利用 requests 或者 urllib2 模擬 ajax 請求,對響應的 json 進行分析得到需要的數據。


能夠直接模擬 ajax 請求獲取數據固然是極好的,但是有些網站把 ajax 請求的所有參數全部加密了。我們根本沒辦法構造自己所需要的數據的請求。這種情況下就用 selenium + phantomJS,調用瀏覽器內核,并利用 phantomJS 執行 js 來模擬人為操作以及觸發頁面中的 js 腳本。從填寫表單到點擊按鈕再到滾動頁面,全部都可以模擬,不考慮具體的請求和響應過程,只是完完整整的把人瀏覽頁面獲取數據的過程模擬一遍。


用這套框架幾乎能繞過大多數的反爬蟲,因為它不是在偽裝成瀏覽器來獲取數據(上述的通過添加 Headers 一定程度上就是為了偽裝成瀏覽器),它本身就是瀏覽器,phantomJS 就是一個沒有界面的瀏覽器,只是操控這個瀏覽器的不是人。利 selenium + phantomJS 能干很多事情,例如識別點觸式(12306)或者滑動式的驗證碼,對頁面表單進行暴力破解等。


--------------------- 


版權聲明:本文為CSDN博主「Jason_Bourne_」的原創文章


上一篇:python培訓 | python常見面試題

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.akpsimsu.com

有位老師想和您聊一聊

關閉

立即申請