
文章目錄
- 前言
- 方法一:cookie登錄
- 方法二:光學字符識別
- 下載驗證碼圖片
- 百度文字識別
- 百度人工智能程式的創建以及AKSK的獲取
- 代碼實作及測驗
- 數字影像處理
- 方法三:
- 換換口味
前言
這就到了第六篇啦,很快啊,懂得都懂啦,這一篇相對會比較輕松一些,
(事實真的是這樣的嗎?不知道哦!!!)
畢竟這一篇是要講驗證碼登錄的嘛,
方法一:cookie登錄
這是一種比較簡單粗暴的方式啊,首先如果沒有驗證碼的需求的話,碧如我之前爬CSDN抓到自己的個人資訊那次,這種方式就很好了,

因為cookie和session的特性,在cookie的有效期內是可以上的去的,
之所以這么說呢,那自然是因為成功過了嘛(爬了哪些網站就不好說了嘛,理解一下),不過由于測驗次數較少,所以也不敢百分百保證能成功,
反正就是,登錄之后盡快拿到cookie,盡快拿去登錄,
這里我要說一句:在進行“高端操作”之前,不妨先拿個二十分鐘來試試這個方法,萬一就成了呢?
我曾經還想用selenium來手動登錄,這種方法經測驗可以登錄的上去,但是爬取資料就沒那么簡單了(可能是我用selenium只會點點點,不會抓資料吧),
方法二:光學字符識別
注:這個方法看不懂就不要看了,不出意外我這輩子不會用這個方法,更不會去用pytesseract
聽這名字,牛逼吧,
其實就是OCR啦,
下載驗證碼圖片
首先要找個目標網址嘛,先找那種簡單的驗證碼,黑白文字的,
captcha影像樣本鏈接,這里面有六十張灰度驗證碼圖,夠用啦,
先把圖扒拉下來,可以看到這張圖是內嵌在頁面中的,像這樣的圖片要怎么辦呢?
不難辦啊這個,圖片也是檔案嘛,只要是檔案,就肯定存在網站的檔案夾下,
內嵌的圖片,不過是以一種相對路徑的方式來寫的罷了,
用網站的根目錄,加上圖片的地址在試試看:https://captcha.com/images/captcha/botdetect3-captcha-ancientmosaic.jpg
現在能下載了不?
import requests
import os
import time
from lxml import etree
def get_Page(url,headers):
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
def parse_Page(html,headers):
html_lxml = etree.HTML(html)
datas = html_lxml.xpath( './/div[@class="captcha_images_left"]|.//div[@class="captcha_images_right"]')
# 創建保存驗證碼檔案夾
file = 'D:/YZM'
if os.path.exists(file):
os.chdir(file)
else:
os.mkdir(file)
os.chdir(file)
for data in datas:
# 驗證碼名稱
name = data.xpath( './/h3')
# 驗證碼鏈接
src = data.xpath( './/div/img/@src')
# print(len(src))
count = 0
for i in range(len(name)):
# 驗證碼圖片檔案名
filename = name[i].text + '.jpg'
img_url = 'https://captcha.com/'+ src[i]
response = requests.get(img_url,headers=headers)
if response.status_code == 200:
image = response.content
with open(filename, 'wb') as f:
f.write(image)
count += 1
print( '保存第{}張驗證碼成功'.format(count))
time.sleep( 1)
def main():
url = 'https://captcha.com/captcha-examples.html?cst=corg'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}
html = get_Page(url,headers)
parse_Page(html,headers)
if __name__ == '__main__':
main()
百度文字識別
Python是有處理OCR的tesserocr庫,據說準確率和上手程度沒有百度這個潤,所以就先講這個了,
百度OCR-API檔案
介面能力啥的我就不說了吧,人家自己有官宣的,
我著重講講怎么用,
首先,你要注冊個賬號,
百度人工智能程式的創建以及AKSK的獲取
代碼實作及測驗
from aip import AipOcr # pip install baidu-aip
import os
i = 0
j = 0
APP_ID = '你的 APP_ID '
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 讀取圖片
file_path = 'D:/YZM'
filenames = os.listdir(file_path)
# print(filenames)
for filename in filenames:
# 將路徑與檔案名結合起來就是每個檔案的完整路徑
info = os.path.join(file_path,filename)
with open(info, 'rb') as fp:
# 獲取檔案夾的路徑
image = fp.read()
# 定義引數變數
options = {
'detect_direction': 'true',
'language_type': 'CHN_ENG',
}
# 呼叫通用文字識別介面
result = client.basicGeneral(image,options)
print(result)
if result[ 'words_result_num'] == 0:
print(filename + ':'+ '----')
i += 1
else:
for word in result['words_result']:
print(filename + ' : '+word['words'])
j += 1
print('共識別驗證碼{}張'.format(i+j))
print('未識別出文本{}張'.format(i))
print('已識別出文本{}張'.format(j))
慘不忍睹啊,就對了兩張,,,
沒事啊,別慌,我們對影像進行一下數字影像處理,
數字影像處理
from PIL import Image
import os
file_path = 'D:/YZM'
filenames = os.listdir(file_path)
for filename in filenames:
info = os.path.join(file_path,filename)
# 打開圖片
image = Image.open(info)
# 傳入'L'將圖片轉化為灰度影像
gray = image.convert('L')
bw = gray.point(lambda x: 0 if x < 1 else 255, '1')
bw.save(filename)
處理之后,整體是好一些,但是也就那樣了,
應該是我學藝不精,畢竟我的數字影像處理能過,離不開老師和同學的努力,一大部分原來就是黑白的圖拿去洗完之后就洗白白了,,
不過嘛,既然是自動化了,別洗了,就多試試嘛,
方法三:
上面那個方法,又臭又長,我不喜歡,浪費我一下午,
我是個實在的人,黑貓白貓,只要能抓老鼠的就是好貓,

方法一需要cookie,會擔驚受怕,隨后講的用selenium操作又不好抓資料,
方法二再怎么樣,也只是識別一下,最后還是得用post方法提交資料上去,
既然selenium、cookie我都能拿出來用了,我還有什么不敢做的?直接圖片爬下來,填上去,暴力吧,當時我們“爬蟲百戰穿山甲”小隊的“從入門到懵逼”小伙伴就是這么干的,人家也成功了,
實作就行了,你管我怎么實作的嘛,
好了好了,說句實在話,如果要處理大量驗證碼的話,方法二是可以去深入挖一下的,
接下來我們看點別的東西吧

換換口味
滑塊驗證碼:爬蟲入門經典(十八) | 滑動驗證碼識別
看他的吧,早些時候我們打過交道,我們都是大資料的學生,這篇里面居然還有我的出鏡機會啊,
破解極驗驗證碼:爬蟲入門經典(十九) | 難度提升,破解極驗驗證碼
再把scrapy和正則運算式的鏈接放了吧,接下來幾天有不得不離開一段時間的原因,要緩更了,
Scrapy:我要偷偷的學Python,然后驚呆所有人(第十三天)
這篇大家的積極性挺高的,
正則:今天我把話放這兒,明天我要會【正則運算式】
這篇我個人很喜歡,但是沒有流量,

我在嗶嗶兩句吧:這個系列本來預計是寫八篇知識點,兩個專案實戰的,但是由于我本身技術有限,加上一些身體原因,到這第六篇就講完我要講的知識點了,接下來會放兩個實戰專案,這個不會折扣,也不會是那種大家都在做的,是“爬蟲百戰穿山甲”團隊遇到的硬骨頭,我去啃一啃吧,
這篇,雖然痞了點,但是不是很水吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252625.html
標籤:AI
