电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python爬蟲如何解決圖片驗證碼

瀏覽:6日期:2022-06-27 18:52:57

之前剛開始做爬蟲的時候遇到過登錄驗證碼問題,看過很多帖子都沒有解決我的問題,發現大多數帖子都是治標不治本,于是想分享一下自己的解決方案。本次采用的網站是古詩文網,使用百度API,因為百度API免費!免費!免費!適合自己學習的時候使用。如果還沒有使用過百度API識別驗證碼的朋友可以看一下我的這個帖子。以下案例采用的時古詩文網:登錄古詩文網,

1、selenium處理圖片驗證碼

先定位到驗證碼圖片,在獲取驗證碼圖片在頁面中的位置,使用save_screenshot截取頁面,再根據圖片的位置去截取驗證碼,最后通過接口識別文字獲取驗證碼,直接上代碼:

element = driver.find_element_by_id(’imgCode’) # 定位驗證碼圖片# 獲取驗證碼圖片在網頁中的位置left = int(element.location[’x’]) # 獲取圖片左上角坐標xtop = int(element.location[’y’]) # 獲取圖片左上角yright = int(element.location[’x’] + element.size[’width’]) # 獲取圖片右下角xbottom = int(element.location[’y’] + element.size[’height’]) # 獲取圖片右下角y# 通過Image處理圖像path = current_dir + str(random.random()) + ’.png’ # 生成隨機文件名driver.save_screenshot(path) # 截取當前窗口并保存圖片im = Image.open(path)# 打開圖片im = im.crop((left, top, right, bottom)) # 截圖驗證碼im.save(path) # 保存驗證碼圖片# 使用百度API識別驗證碼def get_code(): client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 百度API文檔中提供的方法識別文字 # 由于我處理的驗證碼圖片沒有填多的線條,所以直接采用灰度是驗證碼數字更加清晰,具體的處理方式可根據驗證碼的實際情況而定 im = Image.open(path) # 轉換為灰度圖像 im = im.convert(’L’) im.save(path) # 讀取圖片,應為百度API中提供的方法參數只能是字節流 with open(path, ’rb’)as f: image = f.read() # 使用API中提供的方法識別驗證碼并返回驗證碼 code = client.basicGeneral(image) print(code[’words_result’][0][’words’]) # {’words_result’: [{’words’: ’4TBiD ’, ’location’: {’top’: 1, ’left’: 6, ’width’: 43, ’height’: 13}}], ’log_id’: 1358288307112378368, ’words_result_num’: 1} return code[’words_result’][0][’words’]2、使用requests請求驗證碼

這里用到了會話機制,對于初學者來說可能不太了解,簡單說一下會話機制的作用,會話就是用來保存你之前請求的cookie,讓瀏覽器知道你之前就在這里,這樣瀏覽器就不會認為你重新來到這里,從而刷新驗證碼,這樣就可以帶著我們獲取的驗證碼去登錄了。

conn = requests.Sessoin( # 創建會話resp = conn.get(’https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx’)selector = Selector(text=resp.text)img_url = ’https://so.gushiwen.cn/’+selector.xpath(’.//img[@id='imgCode']/@src’).get() # 獲取圖片的路由img = conn.get(img_url) # 保持會話請求filename = str(random.random()) + ’.png’with open(filename, ’wb’)as f: f.write(img.content)# 為了后面的調用接口識別不報圖片格式錯誤,進行一次圖片轉換im = Image.open(filename)im.save(filename)# 使用二進制方式讀取圖片with open(filename, ’rb’)as f:image = f.read()data = client.handwriting(image) # diao’yong# 使用API中提供的方法識別驗證碼并返回驗證碼code = client.basicGeneral(image)code = code[’words_result’][0][’words’]selenium源碼

# -* coding: utf-8 *-import timeimport randomfrom PIL import Imagefrom aip import AipOcrfrom selenium.webdriver import Chrome# 百度API參數APP_ID = ’23647800’API_KEY = ’n95KOQgVuOMoAP72qZZo7uoN’SECRET_KEY = ’7yhyGglHUsY52DD8kf4w0Qjnxum07hMK’client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 調用API接口def scrapy(username, password): ''' :param username: 用戶名 :param password: 密碼 ''' driver = Chrome() driver.get(’https://so.gushiwen.cn/user/login.aspx’) driver.find_element_by_id(’email’).send_keys(username) # 輸入賬號 driver.find_element_by_id(’pwd’).send_keys(password) # 輸入密碼 element = driver.find_element_by_id(’imgCode’) # 定位驗證碼圖片 # 獲取驗證碼圖片在網頁中的位置 left = int(element.location[’x’]) # 獲取圖片左上角坐標x top = int(element.location[’y’]) # 獲取圖片左上角y right = int(element.location[’x’] + element.size[’width’]) # 獲取圖片右下角x bottom = int(element.location[’y’] + element.size[’height’]) # 獲取圖片右下角y # 通過Image處理圖像 filename = str(random.random()) + ’.png’ # 生成隨機文件名 driver.save_screenshot(filename) # 截取當前窗口并保存圖片 im = Image.open(filename) # 打開圖片 im = im.crop((left, top, right, bottom)) # 截圖驗證碼 im.save(filename) # 保存驗證碼圖片 # 由于我處理的驗證碼圖片沒有填多的線條,所以直接采用灰度是驗證碼數字更加清晰,具體的處理方式可根據驗證碼的實際情況而定 im = Image.open(filename) # 轉換為灰度圖像 im = im.convert(’L’) im.save(filename) # 讀取圖片,應為百度API中提供的方法參數只能是字節流 with open(filename, ’rb’)as f: image = f.read() # 使用API中提供的方法識別驗證碼并返回驗證碼 data = client.basicGeneral(image) try: code = data[’words_result’][0][’words’] except: return data[’error_msg’] driver.find_element_by_id(’code’).send_keys(code) # 輸入驗證碼 driver.find_element_by_id(’denglu’).click() # 點擊登錄 time.sleep(1000) # 為了看清登錄,等待1000秒if __name__ == ’__main__’: print(scrapy(username, password)) # 傳入你在古詩文網注冊的賬號密碼requests源碼

# -* coding: utf-8 *-import osimport randomimport reimport requestsfrom PIL import Imagefrom aip import AipOcrfrom scrapy import Selectorheaders = { ’referer’: ’https://so.gushiwen.cn/user/login.aspx’, ’user-agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36’}# 百度API參數APP_ID = ’23647800’API_KEY = ’n95KOQgVuOMoAP72qZZo7uoN’SECRET_KEY = ’7yhyGglHUsY52DD8kf4w0Qjnxum07hMK’def scrapy(username, password): ''' :param username: 用戶名 :param password: 密碼 ''' client = AipOcr(APP_ID, API_KEY, SECRET_KEY) # 調用API接口 conn = requests.Session() # 創建會話 resp = conn.get(’https://so.gushiwen.cn/user/login.aspx’, headers=headers) # 獲取登錄頁面 selector = Selector(text=resp.text) __VIEWSTATE = selector.xpath(’.//input[@id='__VIEWSTATE']/@value’).get() __VIEWSTATEGENERATOR = selector.xpath(’.//input[@id='__VIEWSTATEGENERATOR']/@value’).get() img_url = ’https://so.gushiwen.cn/’ + selector.xpath(’.//img[@id='imgCode']/@src’).get() # 獲取圖片的路由 img = conn.get(img_url, headers=headers) # 獲取圖片路由 # 保存圖片 filename = str(random.random()) + ’.png’ # 隨機生成文件名, 圖片格式不能為jpg,API不支持jpg格式的識別 with open(filename, ’wb’)as f: f.write(img.content) # 由于我處理的驗證碼圖片沒有填多的線條,所以直接采用灰度是驗證碼數字更加清晰,具體的處理方式可根據驗證碼的實際情況而定 im = Image.open(filename) # 轉換為灰度圖像 im = im.convert(’L’) im.save(filename) # 使用二進制方式讀取圖片 with open(filename, ’rb’)as f: image = f.read() # # 標準識別, 每天免費50000次 # data = client.basicGeneral(image) # 精確識別,每天免費500次 data = client.handwriting(image) # 捕獲一下接口識別當中的錯誤,可參照文檔查看報錯原因 try: code = data[’words_result’][0][’words’] except: return data[’error_msg’] form_data = { ’__VIEWSTATE’: __VIEWSTATE, ’__VIEWSTATEGENERATOR’: __VIEWSTATEGENERATOR, ’from’: ’’, ’email’: username, ’pwd’: password, ’code’:cod, ’denglu’: ’登錄’ } # 登錄 html = conn.post(’https://so.gushiwen.cn/user/login.aspx’, headers=headers, data=form_data).text # 獲取登錄標志位 login_flag = re.findall('alert(’(.*?)’);',html)[0] if re.findall('alert(’(.*?)’);',html) else ’’ if not login_flag: return ’登錄成功!’ elif ’驗證碼有誤!’ in login_flag: return '驗證碼錯誤'if __name__ == ’__main__’: print(scrapy(username, password))

以上就是python爬蟲如何解決圖片驗證碼的詳細內容,更多關于python 解決圖片驗證碼的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 电力电子产业网| 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 丝印油墨_水性油墨_环保油墨油漆厂家_37国际化工 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 保温杯,儿童婴童奶瓶,运动水壶「广告礼品杯定制厂家」超朗保温杯壶 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 在线PH计-氧化锆分析仪-在线浊度仪-在线溶氧仪- 无锡朝达 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 中式装修设计_全屋定制家具_实木仿古门窗花格厂家-喜迎门 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 安徽华耐泵阀有限公司-官方网站 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 超声波流量计_流量标准装置生产厂家 _河南盛天精密测控 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 识禅_对禅的了解,从这里开始|