當前位置:首頁 » 編程語言 » python爬驗證碼

python爬驗證碼

發布時間: 2023-01-08 10:00:11

『壹』 python爬取驗證碼圖片,遇到驗證碼src屬性為完整的網址應該怎麼做

爬蟲中手動輸入驗證碼方法無法獲取圖片src地址
驗證碼在html中圖片標簽內容:
<class=「verCodeImg」 src="/kaptcha.jpg?v=0.234724039578059" οnclick=「verCode(this)」>
< class=「verCodeImg」 src="/kaptcha.jpg?v=0.234724239578059" οnclick=「verCode(this)」>
可知獲取到驗證碼的src地址就能動態的獲得驗證碼
因為驗證碼是動態的!動態的!動態的!
用動態爬取網頁的方法:
要用到selenium庫
其實獲得了驗證碼的src地址,我還是沒能成功登陸
因為即使是相同的鏈接點進去,每一次刷新都會有不同的驗證碼
通過動態網頁打開是一張
解析src地址出來是另一張

『貳』 python 爬蟲,怎麼獲得輸入驗證碼之後的搜索結果

首先,題主在程序中輸入驗證碼,主要是想盡量模模擬人的搜索,結果發現所有cookie是一樣的,無需做這一步驗證碼的輸入,如果是這樣的話,無需驗證碼。另外,按題主的代碼來看,題主只要比較一下輸入驗證碼之前和之後的cookie,如果沒有差別,就去掉驗證碼處理。如果有差別,說明在驗證碼的處理中還是做了些事情,就需要驗證碼。

題外話,題主整個思路想復雜了,對於我們政府的網站,其實沒有這么精細的邏輯,比如你上面那個只需要拼接成get請求就可以。

『叄』 python如何識別驗證碼

我們首先識別最簡單的一種驗證碼,即圖形驗證碼。這種驗證碼最早出現,現在也很常見,一般由4位字母或者數字組成。例如,中國知網的注冊頁面有類似的驗證碼,頁面如下所示:

表單中最後一項就是圖形驗證碼,我們必須完全正確輸入圖中的字元才可以完成注冊。

更多有關驗證碼的知識,可以參考這些文章:

Python3爬蟲進階:識別圖形驗證碼

Python3爬蟲進階:識別極驗滑動驗證碼

Python3爬蟲進階:識別點觸點選驗證碼

Python3爬蟲進階:識別微博宮格驗證碼

·本節目標以知網的驗證碼為例,講解利用OCR技術識別圖形驗證碼的方法。

·准備工作識別圖形驗證碼需要庫tesserocr,以mac安裝為例:在mac下,我們首先使用Homebrew安裝ImageMagick和tesseract庫: brew install imagemagickbrew install tesseract 接下來再安裝tesserocr即可:pip3 install tesserocr pillow這樣我們就完成了 tesserocr的安裝。

·獲取驗證碼為了便於實驗,我們先將驗證碼的圖片保存到本地。打開開發者工具,找到驗證碼元素。驗證碼元素是一張圖片,它的ser屬 性是CheckCode.aspk。所以我們直接打開如下鏈接就可以看到一個驗證碼,右鍵保存即可,將其命名為code.jpg:

這樣我們就得到一張驗證碼圖片,以供測試識別使用。

相關推薦:《Python教程》

識別測試

接下來新建一個項目,將驗證碼圖片放到項目根目錄下,用tesserocr庫識別該驗證碼,代碼如下所示:

這里我們新建了一個Image對戲那個,調用了tesserocr的image_to_text( )方法。傳入該Image對象即可完成識別,實現過程非常簡單,結果如下:

我們可以看到,識別的結果和實際結果有偏差,這是因為驗證碼內的多餘線條干擾了圖片的識別。

另外,tesserocr還有一個更加簡單的方法,這個方法可以直接將圖片文件轉為字元串,代碼如下:

不過這種方法的識別效果不如上一種的好。

驗證碼處理

對於上面的圖片,我們可以看到其實並沒有完全識別正確,所以我們需要對圖像作進一步的處理,如灰度轉換、二值化等操作。

我們可以利用Image對象的convert( )方法參數傳入L,即可將圖片轉化為灰度圖像,代碼如下:

傳入1即可將圖片進行二值化處理,如下所示:

我們還可以指定二值化的閾值。上面的方法採用的是默認閾值127。不過我們不能直接轉化原圖,要將原圖先轉化為灰度圖像,然後再指定二值化閾值,代碼如下:

在這里,變數threshold代表二值化閾值,閾值設置為160,之後我們來看看我們的結果:

我們可以看到現在的二維碼就比較方便我們進行識別了;那麼對於一些有干擾的圖片,我們做一些灰度和二值化處理,這會提高圖片識別的正確率。

『肆』 如何python爬蟲識別驗證碼

  1. 在用爬蟲爬取網站數據時,有些站點的一些關鍵數據的獲取需要使用賬號登錄,這里可以使用requests發送登錄請求,並用Session對象來自動處理相關Cookie。

  2. 另外在登錄時,有些網站有時會要求輸入驗證碼,比較簡單的驗證碼可以直接用pytesser來識別,復雜的驗證碼可以依據相應的特徵自己採集數據訓練分類器。

  3. 以CSDN網站的登錄為例,這里用Python的requests庫與pytesser庫寫了一個登錄函數。如果需要輸入驗證碼,函數會首先下載驗證碼到本地,然後用pytesser識別驗證碼後登錄,對於CSDN登錄驗證碼,pytesser的識別率很高。

『伍』 python爬蟲遇到驗證碼怎麼辦

遇到驗證碼就需要破解驗證碼,繞過驗證碼,建議搜虎贏大數據或者是騰蟲大數據裡面爬蟲教程

『陸』 python 爬蟲,關於驗證碼的問題。輸入驗證碼才能搜索。

#給你個例子參考驗證碼請求一次就變了
#!/usr/bin/python
#coding=utf-8
importrequests
importurllib
importurllib2,hashlib,md5

importcookielib

def_md5(password):
md5=hashlib.md5()
md5.update(str.encode(password))
psw=md5.hexdigest()
returnpsw
url='https://passport.liepin.com/captcha/randomcode?2hy270c2ji1'
req=urllib2.Request(url)
res_data=urllib2.urlopen(req)
res=res_data.read()
output_file=open('1.jpg','wb')
output_file.writelines(res)
output_file.close()
verifycode=res_data.headers['Set-Cookie'].split(';')[0]
verifycode=verifycode.replace('verifycode=','')
filename=res_data.headers['Content-disposition'].split(';')[1].strip()
exec(filename)

cookiejar=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
vidcode=raw_input(u"請輸入驗證碼(在本路徑1.jpg):")
data={'user_login':"[email protected]",
'isMd5':"1",
'user_pwd':_md5('love123456'),
'verifycode':vidcode,
'url':""}

url='https://passport.liepin.com/h/login.json'
data=urllib.urlencode(data)
headers={'Content-Type':'application/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest','Cookie':'verifycode={0};'.format(verifycode)}
request=urllib2.Request(url,data,headers)
response=opener.open(request)
print'-------result-------------'
printresponse.read()
print'-------headers-------------'
printresponse.headers
print'-------cookies-------------'
forcookieincookiejar:
printcookie

『柒』 python抓取網頁時是如何處理驗證碼的

python抓取網頁時是如何處理驗證碼的?下面給大家介紹幾種方法:

1、輸入式驗證碼

這種驗證碼主要是通過用戶輸入圖片中的字母、數字、漢字等進行驗證。如下圖:

解決思路:這種是最簡單的一種,只要識別出裡面的內容,然後填入到輸入框中即可。這種識別技術叫OCR,這里我們推薦使用Python的第三方庫,tesserocr。對於沒有什麼背影影響的驗證碼如圖2,直接通過這個庫來識別就可以。但是對於有嘈雜的背景的驗證碼這種,直接識別識別率會很低,遇到這種我們就得需要先處理一下圖片,先對圖片進行灰度化,然後再進行二值化,再去識別,這樣識別率會大大提高。

相關推薦:《Python入門教程》

2、滑動式驗證碼

這種是將備選碎片直線滑動到正確的位置,如下圖:

解決思路:對於這種驗證碼就比較復雜一點,但也是有相應的辦法。我們直接想到的就是模擬人去拖動驗證碼的行為,點擊按鈕,然後看到了缺口的位置,最後把拼圖拖到缺口位置處完成驗證。

第一步:點擊按鈕。然後我們發現,在你沒有點擊按鈕的時候那個缺口和拼圖是沒有出現的,點擊後才出現,這為我們找到缺口的位置提供了靈感。

第二步:拖到缺口位置。

我們知道拼圖應該拖到缺口處,但是這個距離如果用數值來表示?

通過我們第一步觀察到的現象,我們可以找到缺口的位置。這里我們可以比較兩張圖的像素,設置一個基準值,如果某個位置的差值超過了基準值,那我們就找到了這兩張圖片不一樣的位置,當然我們是從那塊拼圖的右側開始並且從左到右,找到第一個不一樣的位置時就結束,這是的位置應該是缺口的left,所以我們使用selenium拖到這個位置即可。

這里還有個疑問就是如何能自動的保存這兩張圖?

這里我們可以先找到這個標簽,然後獲取它的location和size,然後 top,bottom,left,right = location['y'] ,location['y']+size['height']+ location['x'] + size['width'] ,然後截圖,最後摳圖填入這四個位置就行。

具體的使用可以查看selenium文檔,點擊按鈕前摳張圖,點擊後再摳張圖。最後拖動的時候要需要模擬人的行為,先加速然後減速。因為這種驗證碼有行為特徵檢測,人是不可能做到一直勻速的,否則它就判定為是機器在拖動,這樣就無法通過驗證了。

3、點擊式的圖文驗證和圖標選擇

圖文驗證:通過文字提醒用戶點擊圖中相同字的位置進行驗證。

圖標選擇: 給出一組圖片,按要求點擊其中一張或者多張。借用萬物識別的難度阻擋機器。

這兩種原理相似,只不過是一個是給出文字,點擊圖片中的文字,一個是給出圖片,點出內容相同的圖片。

這兩種沒有特別好的方法,只能藉助第三方識別介面來識別出相同的內容,推薦一個超級鷹,把驗證碼發過去,會返回相應的點擊坐標。

然後再使用selenium模擬點擊即可。具體怎麼獲取圖片和上面方法一樣。

4、宮格驗證碼

這種就很棘手,每一次出現的都不一樣,但是也會出現一樣的。而且拖動順序都不一樣。

但是我們發現不一樣的驗證碼個數是有限的,這里採用模版匹配的方法。我覺得就好像暴力枚舉,把所有出現的驗證碼保存下來,然後挑出不一樣的驗證碼,按照拖動順序命名,我們從左到右上下到下,設為1,2,3,4。上圖的滑動順序為4,3,2,1,所以我們命名4_3_2_1.png,這里得手動搞。當驗證碼出現的時候,用我們保存的圖片一一枚舉,與出現這種比較像素,方法見上面。如果匹配上了,拖動順序就為4,3,2,1。然後使用selenium模擬即可。

熱點內容
手機如何設密碼鎖屏 發布:2025-07-10 14:17:06 瀏覽:803
java求絕對值 發布:2025-07-10 14:10:55 瀏覽:653
usb調試開關在哪裡安卓 發布:2025-07-10 13:59:55 瀏覽:78
資料庫維度 發布:2025-07-10 13:54:31 瀏覽:799
c語言位域的賦值 發布:2025-07-10 13:54:30 瀏覽:583
查成績密碼忘了怎麼辦 發布:2025-07-10 13:52:21 瀏覽:819
java死 發布:2025-07-10 13:51:30 瀏覽:996
車輛設施配置有哪些 發布:2025-07-10 13:42:28 瀏覽:820
java的成員 發布:2025-07-10 13:38:59 瀏覽:720
荒島餘生ftp 發布:2025-07-10 13:36:46 瀏覽:923