python爬蟲總是爬不到資料,你需要解決反爬蟲了
爬蟲最討厭的就是反爬蟲,但是如果沒有反爬蟲的存在的,那麼大家都可以隨隨便便就進行網路爬蟲,那麼伺服器又怎麼支撐得起來呢?那麼又怎麼彰顯我們的能力呢?
所以說反爬蟲是一個門檻,跨過這一個門檻就可以輕鬆掌握爬蟲的技術了,跨不過那麼你就一直都在起點而已。
目前常見的反爬蟲無非也就是那幾種(檢查爬蟲的請求頭、檢查發起請求的頻率、新增驗證碼……)
第一種處理請求頭
對於請求頭進行處理就是一個非常簡單的事情了,可以直接使用瀏覽器的請求頭;
headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
# 直接從瀏覽器獲取一個請求頭放置在程式中呼叫即可
也可以使用python中的第三方庫fake-useragent 進行設定,使用python中的第三方庫還有一個好處就是:該模組中已經整合了所有的瀏覽器的請求頭,可以直接進行匯入,同時還可以隨意切換請求頭資訊。
from fake_useragent import UserAgent
ua = UserAgent() # 獲取所有整合之後的瀏覽器請求頭資訊
headers = {'User-Agent':ua.random} # 隨機獲取一個請求頭
第二種請求頻率的處理
對於伺服器對IP地址進行請求次數的限制,當同一個IP在一定的時間內請求的次數過快的時候,就會採取一定的措施進行限制,甚至於會封了該IP地址。
對於這種情況呢?最簡單直接的就是新增延時函式,使得請求的頻率下降,但同時也會減低了爬蟲的效率,這就不是我們想要的效果了。
另外一個辦法就是更換代理IP地址,使用代理IP地址,每發起一定次數的請求之後就更換一個IP地址,這樣子就是一個非常完美的爬蟲了。對於如何更換代理IP以及建立一個屬於自己的代理IP池,在我的上幾個文章已經有了詳細的介紹了,這裡就不加以講解了。
介紹幾個免費高匿代理網站:(西祠代理、快代理、雲代理……)
第三種驗證碼的處理
對於驗證碼如今網路上存在著多種不同的形式的驗證碼,首先介紹幾種簡單的驗證碼形式吧。
字元驗證碼:在圖片上隨機產生數字、英文字母或者漢字,一般是4位或者6位的驗證碼字元。
圖形驗證碼:這類驗證碼大多是計算機隨機產生一個字串,在把字串增加噪點、干擾線、變形、重疊、不同顏色、扭曲組成一張圖片來增加識別難度。
(上面兩類驗證碼的解決方法:使用orc模組進行二值化圖片,提取圖片驗證碼)
如今網路上新增到圖片中噪點技術已經相當的成熟,一般使用簡單的orc模組進行處理,已經難以識別出驗證碼內容了。一般都需要結合到機器學習,使用訓練好的模型進行識別圖片,獲取圖片驗證碼內容;或者把圖片上傳到一些打碼平臺,使用打碼平臺的返回結果進行操作。
滑動驗證碼:也叫行為驗證碼,比較流行的一種驗證碼,通過使用者的操作行為來完成驗證,其中最出名的就是極驗。
(解決方案:通過開發者工具,獲取原圖片以及需要滑動的圖片,使用程式對比兩張圖片的RGB,得出需要活動的距離,之後使用自動化工具(selenium)進行滑動登入,注意滑動的使用需要新增一定的延時或者加速度,使得滑動過程沒有那麼的平滑,模擬人的行為)
滑動驗證碼的原理就是使用機器學習中的深度學習技術,根據一些特徵來區分是否為正常使用者。通過記錄使用者的滑動速度,還有每一小段時間的瞬時速度,使用者滑鼠點選情況,以及滑動後的匹配程度來識別。而且,不是說滑動到正確位置就是驗證通過,而是根據特徵識別來區分是否為真使用者,滑到正確位置只是一個必要條件。
點觸驗證碼:點選類驗證碼都是給出一張包含文字的圖片,通過文字提醒使用者點選圖中相同字的位置進行驗證。(解決方案:獲取驗證碼圖片,以及需要點選的驗證字的順序,之後對圖片進行識別,獲取每個驗證字的內容,之後組成正確的順序,獲取每個驗證字的位置,使用自動化工具進行點選對應的位置)
這種相對於上面的幾種驗證碼而言才是最難解決的。
第四種JavaScript前端渲染資料,對網頁進行渲染
1、嘗試在開發者工具中查詢資料的來源,找到資料的介面,使用資料介面進行呼叫,獲取資料,簡單直接;如果使用開發者工具無法抓到資料包,可以使用第三方的抓包軟體進行抓包(fiddler等等)。
2、對於一些複雜的網頁,在找不到資料介面的情況下,可以使用selenium模組,使用內建瀏覽器模擬網頁正常開啟,獲取原始碼資料,但是效率不高。
3.對於一些大型的網站,在PC端的網頁版難以尋找到突破口的時候,可以嘗試使用網頁版的手機端網站,進行獲取資料(前提:存在手機端的網頁版)。
相關文章
- 反爬蟲之字型反爬蟲爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 什麼是爬蟲?Python爬蟲工作需要掌握哪些技能?爬蟲Python
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- 爬蟲與反爬蟲技術簡介爬蟲
- 【python爬蟲】python爬蟲demoPython爬蟲
- 什麼是爬蟲?Python爬蟲框架有哪些?爬蟲Python框架
- C#爬蟲與反爬蟲--字型加密篇C#爬蟲加密
- 什麼是Python爬蟲?一篇文章帶你全面瞭解爬蟲Python爬蟲
- Python爬蟲 - 記一次字型反爬Python爬蟲
- 反網路爬蟲以及解決方案爬蟲
- 利用Python爬蟲爬取天氣資料Python爬蟲
- 什麼是Python爬蟲?python爬蟲入門難嗎?Python爬蟲
- python爬蟲是什麼?學習python爬蟲難嗎Python爬蟲
- 什麼是Python爬蟲?Python爬蟲常用框架有哪些?Python爬蟲框架
- 爬蟲:多程式爬蟲爬蟲
- Python爬蟲入門教程 61-100 寫個爬蟲碰到反爬了,動手破壞它!Python爬蟲
- Python爬蟲:一些常用的爬蟲技巧總結Python爬蟲
- Python爬蟲入門(2):爬蟲基礎瞭解Python爬蟲
- 什麼是爬蟲?學習Python爬蟲難不難?爬蟲Python
- 什麼是爬蟲?Python爬蟲工程師崗位爬蟲Python工程師
- 我去!爬蟲遇到字型反爬,哭了爬蟲
- Python 爬蟲實戰(2):股票資料定向爬蟲Python爬蟲
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲
- 通用爬蟲與聚焦爬蟲爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- python爬蟲Python爬蟲
- python 爬蟲Python爬蟲
- 「資料分析」2種常見的反爬蟲策略,資訊驗證和動態反爬蟲爬蟲
- 學透著13個爬蟲,這天下將沒有你爬不到的資料!爬蟲
- 什麼是爬蟲?Python爬蟲的工作流程怎樣?爬蟲Python
- python爬蟲是什麼?爬蟲可以分為哪幾類?Python爬蟲
- python爬蟲需要什麼模組Python爬蟲
- python網路爬蟲(7)爬取靜態資料詳解Python爬蟲
- 反爬蟲應對策略爬蟲