溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用python怎么做反被爬保護(hù)

發(fā)布時(shí)間:2021-05-20 17:32:46 來源:億速云 閱讀:127 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)使用python怎么做反被爬保護(hù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一: User-Agent +Referer檢測(cè)

User-Agent 是HTTP協(xié)議的中的一個(gè)字段, 其作用是描述發(fā)出HTTP請(qǐng)求的終端的一些信息。

使得服務(wù)器能夠識(shí)別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

服務(wù)器通過這個(gè)字段就可以知道訪問網(wǎng)站的是什么人。對(duì)于不是正常瀏覽器的用戶進(jìn)行屏蔽。

解決方案:

偽裝瀏覽器的User-Agent,因?yàn)槊總€(gè)瀏覽器的User-Agent不一樣,并且所有的用戶都能使用瀏覽器。所有每次請(qǐng)求的時(shí)候條件瀏覽器的User-Agent,就能解決UA檢測(cè)

Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器我是從哪個(gè)頁面鏈接過來的。例如有一些圖片網(wǎng)站在你請(qǐng)求圖片的時(shí)候,就會(huì)檢測(cè)你的Referer值,如果Referer不符合,不會(huì)返回正常的圖片。

解決方案:

在檢測(cè)referer的請(qǐng)求中,攜帶符合的referer值。

二: js混淆和渲染

所謂 JavaScript 混淆,基本就是:

1.去掉一些實(shí)際沒有調(diào)用的函數(shù)。

2.將零散的變量聲明合并。

3.邏輯函數(shù)的精簡。

4.變量名的簡化。具體要看不同的壓縮工具的考慮優(yōu)劣。常見的有UglifyJS、JScrambler等工具。

js渲染其實(shí)就是對(duì)HTML頁面的修改。比如有一些網(wǎng)頁本身沒有返回?cái)?shù)據(jù),數(shù)據(jù)是經(jīng)過js加載之后添加到HTML當(dāng)中的。當(dāng)遇到這種情況的時(shí)候,我們要知道爬蟲是不會(huì)執(zhí)行JavaScript操作。所以需要用其他的方法處理。

解決方案:

1.通過閱讀網(wǎng)站js源碼,找到關(guān)鍵的代碼,并用python實(shí)現(xiàn)。

2.通過閱讀網(wǎng)站js源碼,找到關(guān)鍵的代碼,用PyV8,execjs等庫直接執(zhí)行js代碼。

3.通過selenium庫直接模擬瀏覽器環(huán)境

三:IP限制頻次

WEB系統(tǒng)都是走h(yuǎn)ttp協(xié)議跟WEB容器連通的,每次請(qǐng)求至少會(huì)產(chǎn)生一次客戶端與服務(wù)器的tcp連接。

對(duì)于服務(wù)端來說可以很清楚的查看到,一個(gè)ip地址在單位時(shí)間內(nèi)發(fā)起的請(qǐng)求。

當(dāng)請(qǐng)求數(shù)超過一定的值之后,就可判斷為非正常的用戶請(qǐng)求。

解決方案:

1.自行設(shè)計(jì)ip代理池,通過輪換的方式,每次請(qǐng)求攜帶不同的代理地址。

2.ADSL動(dòng)態(tài)撥號(hào)他有個(gè)獨(dú)有的特點(diǎn),每撥一次號(hào),就獲取一個(gè)新的IP。也就是它的IP是不固定的。

四:驗(yàn)證碼

驗(yàn)證碼(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and HumansApart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試)的縮寫,是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序。

可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試。

這個(gè)問題可以由計(jì)算機(jī)生成并評(píng)判,但是必須只有人類才能解答。由于計(jì)算機(jī)無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認(rèn)為是人類。

解決方案:

1.手動(dòng)識(shí)別驗(yàn)證碼

2.pytesseract識(shí)別簡單的驗(yàn)證碼

3.對(duì)接打碼平臺(tái)

4.機(jī)器學(xué)習(xí)

擴(kuò)展知識(shí):

基于反爬的相關(guān)實(shí)例代碼:

#! /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()

Python的優(yōu)點(diǎn)有哪些

1、簡單易用,與C/C++、Java、C# 等傳統(tǒng)語言相比,Python對(duì)代碼格式的要求沒有那么嚴(yán)格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺(tái)上使用;3、Python面向?qū)ο螅軌蛑С置嫦蜻^程編程,也支持面向?qū)ο缶幊蹋?、Python是一種解釋性語言,Python寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運(yùn)行程序;5、Python功能強(qiáng)大,擁有的模塊眾多,基本能夠?qū)崿F(xiàn)所有的常見功能。

上述就是小編為大家分享的使用python怎么做反被爬保護(hù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI