Python中常見的反爬機(jī)制及其破解方法總結(jié)_第1頁
Python中常見的反爬機(jī)制及其破解方法總結(jié)_第2頁
Python中常見的反爬機(jī)制及其破解方法總結(jié)_第3頁
Python中常見的反爬機(jī)制及其破解方法總結(jié)_第4頁
Python中常見的反爬機(jī)制及其破解方法總結(jié)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Python中常見的反爬機(jī)制及其破解方法總結(jié)—文字驗(yàn)證碼—OCR(光學(xué)文字識(shí)別)—接口/easyocr

程序自己解決不了的問題就可以考慮使用三方接口(付費(fèi)/免費(fèi))

—行為驗(yàn)證碼—超級(jí)鷹

~手機(jī)號(hào)+短信驗(yàn)證碼

—接碼平臺(tái)

~動(dòng)態(tài)內(nèi)容

—JavaScript逆向—找到提供數(shù)據(jù)的API接口

—手機(jī)抓接口—抓包工具(Charles/Fiddler)

—Selenium直接模擬瀏覽器操作獲取動(dòng)態(tài)內(nèi)容

~find_element_by_xxx/find_elements_by_xxx

~page_source—獲取包含動(dòng)態(tài)內(nèi)容的網(wǎng)頁源代碼

—JavaScript加密和混淆技術(shù)—讀懂JavaScript是反反爬的前提

~字體反爬/內(nèi)容來自于摳圖

—例子

bytes—不變字節(jié)串—二進(jìn)制—BytesIO

str—不變字符串—可閱讀的字符—StringIO

二、調(diào)用三方API接口數(shù)據(jù)(天行數(shù)據(jù))

importrequests

forpageinrange(1,6):

response=requests.get(

'/topnews/index',

params={

'key':'d5eace66dccd771e36767ce3563efa09',

'page':page,

'num':20,

'word':'華為',

'src':'人民日?qǐng)?bào)'

result=response.json()

fornewsinresult['newslist']:

print(news['title'])

print(news['url'])

三、OCR(光學(xué)文字識(shí)別)庫

python自帶的easyocr庫

importeasyocr

reader=easyocr.Reader(['ch_sim','en'],gpu=False)

print(reader.readtext('./files/captcha.jpg',detail=0))

例子:阿里云郵箱自動(dòng)登陸

importio

importeasyocr

fromPILimportImage

fromseleniumimportwebdriver

frommon.byimportBy

fromselenium.webdriver.supportimportexpected_conditions

fromselenium.webdriver.support.waitimportWebDriverWait

browser=webdriver.Chrome()

browser.set_window_size(1280,960)

browser.get('/')

#隱式等待(下面的方法在工作時(shí)如果取不到就等10秒)

browser.implicitly_wait(10)

#顯式等待

wait=WebDriverWait(browser,10)

wait.until(expected_conditions.presence_of_element_located((By.CSS_SELECTOR,'.login_panel_iframe')))

iframe1=browser.find_element_by_css_selector('.login_panel_iframe')

#記錄iframe1的位置(相對(duì)位置)

x1,y1=iframe1.location['x'],iframe1.location['y']

#Chrome對(duì)象的switch_to屬性的frame方法,可以從頁面切換到iframe中

browser.switch_to.frame(iframe1)

iframe2=browser.find_element_by_css_selector('#ding-login-iframe')

x2,y2=iframe2.location['x'],iframe2.location['y']

browser.switch_to.frame(iframe2)

username_input=browser.find_element_by_css_selector('#username')

#模擬用戶輸入

username_input.send_keys('xx@1000')

password_input=browser.find_element_by_css_selector('#password')

password_input.send_keys('xxxxx!!')

#創(chuàng)建一個(gè)等待對(duì)象

wait=WebDriverWait(browser,10)

wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'#login_checkcode_ico')))

captcha_img=browser.find_element_by_css_selector('#login_checkcode_ico')

#WebElement對(duì)象的size屬性代表元素寬度和高度,location屬性代表元素在窗口中的位置

size,location=captcha_img.size,captcha_img.location

x3,y3,width,height=location['x'],location['y'],size['width'],size['height']

#截取整個(gè)瀏覽器窗口的圖片獲得圖片的二進(jìn)制數(shù)據(jù)

image_data=browser.get_screenshot_as_png()

#bytes(只讀字節(jié)串)io.BytesIO(可寫字節(jié)串)getvalue()bytes

#str(只讀字符串)io.StringIO(可寫字符串)getvalue()str

browser_image=Image.open(io.BytesIO(image_data))

#從截圖上剪裁出驗(yàn)證碼的圖片

x,y=x1+x2+x3,y1+y2+y3

#Windows系統(tǒng)的寫法如果截圖有問題就把坐標(biāo)寫死

#print(x,y,width,height)

checkcode_image=browser_image.crop((x*1.25,y*1.25,(x+width)*1.25,(y+height)*1.25))

#macOS系統(tǒng)的寫法

#checkcode_image=browser_image.crop((x*2,y*2,(x+width)*2,(y+height)*2))

checkcode_image.save('result.png')

#通過easyocr做光學(xué)文字識(shí)別

reader=easyocr.Reader(['en'],gpu=False)

code=reader.readtext('result.png',detail=0)[0]

#將識(shí)別出的驗(yàn)證碼輸入文本框

checkcode_input=browser.find_element_by_css_selector('#login_checkcode')

checkcode_input.send_keys(code)

login_button=browser.find_element_by_css_selector('#login_submit_btn')

#模擬用戶點(diǎn)擊

login_button.click()

四、第三方打碼平臺(tái)(超級(jí)鷹打碼平臺(tái))

補(bǔ)充:需要使用python自帶pillow庫

Pillow庫PILPythonImageLibrary

fromPILimportImage,ImageFilter

#加載圖像

guido_image=Image.open('guido.jpg')

guido_image.crop((80,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論