摘要:在爬取網站的時候都遇到過驗證碼,那么我們有什么方法讓程序自動的識別驗證碼呢其實網上已有很多打碼平臺,但是這些都是需要。但對于僅僅爬取點數據而接入打碼平臺實屬浪費。所以百度免費正好可以利用。
在爬取網站的時候都遇到過驗證碼,那么我們有什么方法讓程序自動的識別驗證碼呢?其實網上已有很多打碼平臺,但是這些都是需要money。但對于僅僅爬取點數據而接入打碼平臺實屬浪費。所以百度免費orc正好可以利用。(每天500次免費)
1、注冊百度賬號、百度云管理中心創建應用、生成AppKey、SecretKey(程序調用接口是要生成access_token)
2、利用AppKey、SecretKey生成access_token
向授權服務地址https://aip.baidubce.com/oaut...發送請求(推薦使用POST)并在URL中帶上以下參數:
grant_type: 必須參數,固定為client_credentials;
client_id: 必須參數,應用的API Key;
client_secret: 必須參數,應用的Secret Key
代碼如下:
/** 1. 獲取AccessToken 2. APIKey: 3. SecretKey: 4. @return */ public static String getAccessToken() { String accessToken = ""; HttpRequestData httpRequestData = new HttpRequestData(); HashMapparams = new HashMap<>(); params.put("grant_type", "client_credentials"); params.put("client_id", "你的APIKey"); params.put("client_secret", "SecretKey"); httpRequestData.setRequestMethod("GET"); httpRequestData.setParams(params); httpRequestData.setRequestUrl("https://aip.baidubce.com/oauth/2.0/token"); HttpResponse response = HttpClientUtils.execute(httpRequestData); String json = ""; try { json = IOUtils.toString(response.getEntity().getContent()); } catch (IOException e) { e.printStackTrace(); } if (response.getStatusLine().getStatusCode() == 200) { JSONObject jsonObject = JSONObject.parseObject(json); if (jsonObject != null && !jsonObject.isEmpty()) { accessToken = jsonObject.getString("access_token"); } } return accessToken; }
3、請求百度orc通用文字識別API(下面以百度通用識別api識別為例)
請求API的URL https://aip.baidubce.com/rest...
請求方法 POST
請求URL參數 access_token
請求頭 (Header) Content-Type application/x-www-form-urlencoded
Body中放置請求參數,主要參數詳情如下:
image : 圖像數據,base64編碼,要求base64編碼后大小不超過4M,最短邊至少15px,最長邊最大4096px,支持jpg/png/bmp格式,當image字段存在時url字段失效
url : 圖片完整URL,URL長度不超過1024字節,URL對應的圖片base64編碼后大小不超過4M,最短邊至少15px,最長邊最大4096px,支持jpg/png/bmp格式,當image字段存在時url字段失效
/** * 獲取識別驗證碼 * @param imageUrl * @return */ public static String OCRVCode(String imageUrl){ String VCode = ""; if (StringUtils.isBlank(ACCESS_TOKEN)) { logger.error("accessToken為空"); return VCode; } OCRUrl = OCRUrl + "?access_token=" + ACCESS_TOKEN; HashMapheaders = new HashMap<>(); headers.put("Content-Type", "application/x-www-form-urlencoded"); HashMap params = new HashMap<>(); imageUrl = ImageBase64ToStringUtils.imageToStringByBase64(imageUrl); params.put("image", imageUrl); HttpRequestData httpRequestData = new HttpRequestData(); httpRequestData.setHeaders(headers); httpRequestData.setRequestMethod("post"); httpRequestData.setParams(params); httpRequestData.setRequestUrl(OCRUrl); HttpResponse response = HttpClientUtils.execute(httpRequestData); String json = ""; if (response.getStatusLine().getStatusCode() == 200) { try { json = IOUtils.toString(response.getEntity().getContent()); JSONObject jsonObject = JSONObject.parseObject(json); JSONArray wordsResult = jsonObject.getJSONArray("words_result"); VCode = wordsResult.getJSONObject(0).getString("words"); } catch (IOException e) { logger.error("請求識別失??!", e); } } return VCode; }
對圖片進行base64編碼字符
/** * 將本地圖片進行Base64位編碼 * @param imageFile * @return */ public static String encodeImgageToBase64(String imageFile) { // 其進行Base64編碼處理 byte[] data = null; // 讀取圖片字節數組 try { InputStream in = new FileInputStream(imageFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 對字節數組Base64編碼 return Base64Util.encode(data); } 4、返回結果以json方式返回 { "log_id": 2471272194, "words_result_num": 2, "words_result": [ {"words": " TSINGTAO"}, {"words": "青島睥酒"} ] }
項目github地址:https://github.com/xwlmdd/ipP...
注:orc圖片識別模塊在這個項目里的一個工具類
我的公眾號,喜歡的朋友可以關注哦
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70312.html
摘要:登錄開發者后臺我的軟件獲得軟件軟件密鑰注意這里是普通會員賬號,不是開發者賬號,注冊地址開發者可以聯系客服領取免費調試題分請先設置用戶名密碼一鍵識別函數正在一鍵識別例表示位字母數字,不同類型收費不同。請準確填寫,否則影響識別率。 【百度云搜索:http://www.bdyss.cn】 【搜網盤:http://www.swpan.cn】 打碼接口文件 # -*- coding: cp936...
閱讀 2834·2021-11-24 09:39
閱讀 4112·2021-10-27 14:19
閱讀 2052·2021-08-12 13:25
閱讀 2339·2019-08-29 17:07
閱讀 1117·2019-08-29 13:44
閱讀 1071·2019-08-26 12:17
閱讀 465·2019-08-23 17:16
閱讀 2053·2019-08-23 16:46