您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用python怎么做反被爬保護,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
一: User-Agent +Referer檢測
User-Agent 是HTTP協議的中的一個字段, 其作用是描述發出HTTP請求的終端的一些信息。
使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
服務器通過這個字段就可以知道訪問網站的是什么人。對于不是正常瀏覽器的用戶進行屏蔽。
解決方案:
偽裝瀏覽器的User-Agent,因為每個瀏覽器的User-Agent不一樣,并且所有的用戶都能使用瀏覽器。所有每次請求的時候條件瀏覽器的User-Agent,就能解決UA檢測
Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的。例如有一些圖片網站在你請求圖片的時候,就會檢測你的Referer值,如果Referer不符合,不會返回正常的圖片。
解決方案:
在檢測referer的請求中,攜帶符合的referer值。
二: js混淆和渲染
所謂 JavaScript 混淆,基本就是:
1.去掉一些實際沒有調用的函數。
2.將零散的變量聲明合并。
3.邏輯函數的精簡。
4.變量名的簡化。具體要看不同的壓縮工具的考慮優劣。常見的有UglifyJS、JScrambler等工具。
js渲染其實就是對HTML頁面的修改。比如有一些網頁本身沒有返回數據,數據是經過js加載之后添加到HTML當中的。當遇到這種情況的時候,我們要知道爬蟲是不會執行JavaScript操作。所以需要用其他的方法處理。
解決方案:
1.通過閱讀網站js源碼,找到關鍵的代碼,并用python實現。
2.通過閱讀網站js源碼,找到關鍵的代碼,用PyV8,execjs等庫直接執行js代碼。
3.通過selenium庫直接模擬瀏覽器環境
三:IP限制頻次
WEB系統都是走http協議跟WEB容器連通的,每次請求至少會產生一次客戶端與服務器的tcp連接。
對于服務端來說可以很清楚的查看到,一個ip地址在單位時間內發起的請求。
當請求數超過一定的值之后,就可判斷為非正常的用戶請求。
解決方案:
1.自行設計ip代理池,通過輪換的方式,每次請求攜帶不同的代理地址。
2.ADSL動態撥號他有個獨有的特點,每撥一次號,就獲取一個新的IP。也就是它的IP是不固定的。
四:驗證碼
驗證碼(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and HumansApart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。
可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。
這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。
解決方案:
1.手動識別驗證碼
2.pytesseract識別簡單的驗證碼
3.對接打碼平臺
4.機器學習
擴展知識:
基于反爬的相關實例代碼:
#! /usr/bin/env python3.4 #-*- coding:utf-8 -*- #__author__ == "tyomcat" import urllib.request import random import re url='http://www.whatismyip.com.tw' iplist=['121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843'] proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)}) opener=urllib.request.build_opener(proxy_support) opener.addheaders=[('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36')] urllib.request.install_opener(opener) response = urllib.request.urlopen(url) html = response.read().decode('utf-8') pattern = re.compile('<h2>(.*?)</h2>.*?<h3>(.*?)</h3>') iterms=re.findall(pattern,html) for item in iterms: print(item[0]+":"+item[1])
#! /usr/bin/env python # -*- coding:utf-8 -*- #__author__ == "tyomcat" from selenium import webdriver import time import re drive = webdriver.PhantomJS(executable_path='phantomjs-2.1.1-linux-x86_64/bin/phantomjs') drive.get('https://mm.taobao.com/self/model_info.htm?user_id=189942305&is_coment=false') time.sleep(5) pattern = re.compile(r'<div.*?mm-p-domain-info">.*?class="mm-p-info-cell clearfix">.*?<li>.*?<label>(.*?)</label><span>(.*?)</span>',re.S) html=drive.page_source.encode('utf-8','ignore') items=re.findall(pattern,html) for item in items: print item[0],'http:'+item[1] drive.close()
1、簡單易用,與C/C++、Java、C# 等傳統語言相比,Python對代碼格式的要求沒有那么嚴格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向對象,能夠支持面向過程編程,也支持面向對象編程;4、Python是一種解釋性語言,Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序;5、Python功能強大,擁有的模塊眾多,基本能夠實現所有的常見功能。
上述就是小編為大家分享的使用python怎么做反被爬保護了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。