日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

学信网 学籍、学历在线验证

發(fā)布時(shí)間:2023/12/19 综合教程 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 学信网 学籍、学历在线验证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:本博客純屬技術(shù)學(xué)習(xí),由于是用爬蟲(chóng)形式實(shí)現(xiàn)的,不確定是否違反相關(guān)法律,若進(jìn)行商用請(qǐng)自行咨詢學(xué)信網(wǎng),學(xué)信網(wǎng)網(wǎng)址:https://www.chsi.com.cn/

1.添加依賴

外部依賴有jsoup,taip,fastjson。

jsoup用來(lái)解析html; taip是騰訊AI的java 非官方api包,碼云網(wǎng)址為:https://gitee.com/xshuai/taip, 用于做 ocr識(shí)別,因?yàn)椴糠謹(jǐn)?shù)據(jù)在圖片中,需要做ocr才能獲得,因此這部分?jǐn)?shù)據(jù)的可靠性與騰訊的ocr識(shí)別率相關(guān);fastjson是用來(lái)解析json字符串的。

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.12.1</version>
</dependency>

<dependency>
    <groupId>cn.xsshome</groupId>
    <artifactId>taip</artifactId>
    <version>4.3.5</version>
</dependency>

<!-- fastjson依賴 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

2.根據(jù) 在線驗(yàn)證碼 獲取學(xué)信網(wǎng)html

這部分用的是RestTemplate來(lái)獲取

public static StuInfo parseUrl(String vcode) {
    RestTemplate restTemplate = new RestTemplate();
    String url = "https://www.chsi.com.cn/xlcx/bg.do?vcode=" + vcode + "&srcid=bgcx";
    String html = restTemplate.getForObject(url, String.class);
    return parseHtml(html);
}

這部分得到的是html,vcode可以是 學(xué)籍的,也可以是學(xué)歷的

3.學(xué)籍和學(xué)歷信息解析

一個(gè)vcode只能對(duì)應(yīng)學(xué)籍或者學(xué)歷解析

/**
 * 這里建議添加異常捕捉操作,
 * 這是一個(gè)爬蟲(chóng)方式來(lái)獲取的,一旦網(wǎng)頁(yè)發(fā)生變化,解析的部分沒(méi)做非空檢查,可能會(huì)拋出異常
 */
private static StuInfo parseHtml(String strHtml) {
    Document doc = Jsoup.parse(strHtml, "UTF-8");
    Elements eleDiv2 = doc.getElementsByClass("tableTitle");
    if (eleDiv2.text().contains("學(xué)歷")) {
        return parseXueLi(strHtml);
    } else if (eleDiv2.text().contains("學(xué)籍")) {
        return parseXueJi(strHtml);
    }
    return null;
}

學(xué)籍解析:

/**
 * 學(xué)籍解析
 */
private static StuInfo parseXueJi(String strHtml) {
    Document doc = Jsoup.parse(strHtml, "UTF-8");
    Elements eleDiv2 = doc.getElementsByClass("div2");
    if (eleDiv2 != null && !eleDiv2.isEmpty()) {
        Elements eleTd = eleDiv2.get(0).getElementsByTag("td");
        if (eleTd != null && !eleTd.isEmpty()) {
            StuInfo stuInfo = new StuInfo();
            // 姓名是圖片,調(diào)用騰訊API實(shí)現(xiàn)ocr識(shí)別
            String nameImg = eleTd.get(1).getElementsByTag("img").get(0).attr("src");
            stuInfo.setName(aiOcr(nameImg));
            stuInfo.setGender(eleTd.get(4).text());
            stuInfo.setIdCard(eleTd.get(6).text());
            stuInfo.setNation(eleTd.get(8).text());
            stuInfo.setBirthDay(eleTd.get(10).text());
            stuInfo.setUniversity(eleTd.get(12).text());
            stuInfo.setLevel(eleTd.get(14).text());
            stuInfo.setDepartment(eleTd.get(16).text());
            stuInfo.setSClass(eleTd.get(18).text());
            stuInfo.setDomain(eleTd.get(20).text());
            stuInfo.setStuNum(eleTd.get(22).text());
            stuInfo.setForm(eleTd.get(24).text());
            stuInfo.setEntranceDate(eleTd.get(26).text());
            stuInfo.setLenOfSchooling(eleTd.get(28).text());
            stuInfo.setType(eleTd.get(30).text());
            String[] status = eleTd.get(32).text().split("\(");
            stuInfo.setStatus(status[0]);
            stuInfo.setGraduationDate(status[1].substring(0, status[1].length() - 1));
            return stuInfo;
        }
    }
    return null;
}

學(xué)歷解析:

/**
     * 學(xué)歷解析
     */
    private static StuInfo parseXueLi(String strHtml) {
        Document doc = Jsoup.parse(strHtml, "UTF-8");
        Elements eleDiv2 = doc.getElementsByClass("div2");
        if (eleDiv2 != null && !eleDiv2.isEmpty()) {
            Elements eleTd = eleDiv2.get(0).getElementsByTag("td");
            if (eleTd != null && !eleTd.isEmpty()) {
                StuInfo stuInfo = new StuInfo();
                // 姓名是圖片,調(diào)用騰訊API實(shí)現(xiàn)ocr識(shí)別
                String nameImg = eleTd.get(0).getElementsByTag("img").get(0).attr("src");
                stuInfo.setName(aiOcr(nameImg));
                stuInfo.setGender(eleTd.get(2).text());
                stuInfo.setBirthDay(eleTd.get(3).text());
                stuInfo.setEntranceDate(eleTd.get(4).text());
                stuInfo.setGraduationDate(eleTd.get(5).text());
                stuInfo.setType(eleTd.get(6).text());
                stuInfo.setLevel(eleTd.get(7).text());
                stuInfo.setUniversity(eleTd.get(8).text());
                stuInfo.setLenOfSchooling(eleTd.get(9).text());
                stuInfo.setDomain(eleTd.get(10).text());
                stuInfo.setForm(eleTd.get(11).text());
                stuInfo.setCertificateNum(eleTd.get(12).text());
                // 狀態(tài)是圖片,調(diào)用騰訊API實(shí)現(xiàn)ocr識(shí)別
                String statusImg = eleTd.get(13).getElementsByTag("img").get(0).attr("src");
                stuInfo.setStatus(aiOcr(statusImg));
                stuInfo.setPresident(eleTd.get(14).text());
                return stuInfo;
            }
        }
        return null;
    }

注意:本部分代碼中均沒(méi)有添加非空檢查,一般而言要先做非空檢查再獲取值,防止可能出現(xiàn)的異常。這里只是個(gè)人娛樂(lè),為了代碼簡(jiǎn)單易讀所以省了這部分。

學(xué)籍和學(xué)歷解析中有部分?jǐn)?shù)據(jù)是再圖片中的,需要做 ocr識(shí)別才能獲取,aiOcr()函數(shù)就是做ocr識(shí)別的,下一步再說(shuō)。

具體網(wǎng)頁(yè)有變化時(shí),解析需要按照網(wǎng)頁(yè)變化進(jìn)行對(duì)應(yīng)調(diào)整。

4. 圖片信息獲取

圖片內(nèi)信息的獲取調(diào)用的騰訊的OCR識(shí)別,依賴的taip客戶端接口。taip接口包含了騰訊AI的所有功能,很強(qiáng)大,感興趣的話可以玩玩,但需要先注冊(cè)騰訊AI開(kāi)放平臺(tái),飛機(jī)票:https://ai.qq.com/product/nlpchat.shtml

/**
 * 這個(gè)地方可能需要調(diào)用多次,騰訊 ocr 并不是每次都會(huì)正確返回結(jié)果,有時(shí)候會(huì)報(bào)系統(tǒng)繁忙請(qǐng)稍后再試
 */
private static String aiOcr(String imgUrl) {
    String url = "https://www.chsi.com.cn" + imgUrl;
    TAipOcr aipOcr = new TAipOcr(APP_ID, APP_KEY);
    try {
        String result = aipOcr.handWritingOcrByUrl(url);
        // fastjson 解析的時(shí)候也可能報(bào)錯(cuò)
        OcrResult ocrResult = JSONObject.parseObject(result, OcrResult.class);
        return ocrResult.getData().getItem_list().get(0).getItemstring();
    } catch (Exception e) {
        System.out.println("ocr 識(shí)別出錯(cuò)");
        return "";
    }
}

這個(gè)地方的異常處理也有待補(bǔ)充,邏輯也有待補(bǔ)充。

完整代碼:https://gitee.com/betterwgo/chsi_api


總結(jié)

以上是生活随笔為你收集整理的学信网 学籍、学历在线验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。