免責事項:爬虫類は、不確実性の形で実現されているので、このブログは、市販の電気通信ネットワークのために行われた場合、適用される法律に違反している、手紙を学ぶ、自分自身の学習を参照してください、純粋に技術的な学習で、ウェブサイト:https://www.chsi.com.cn /
1. [追加の依存
外部依存関係はjsoup、taip、fastjsonを持っています。
;解析HTML用jsoupで利用可能なAI、クラウドコードのtaipテンセント非公式API Javaパッケージ:https://gitee.com/xshuai/taipは、OCRのか特定するため、画像データの一部ので、OCRを実行する必要がこれはテンセントOCR認識率と、このデータの関連する部分の信頼性を得ることができる。FASTJSONのJSONは、文字列を解析するために使用されます。
<依存> <groupIdを> org.jsoup </ groupIdを> <たartifactId> jsoup </たartifactId> <バージョン> 1.12.1 </バージョン> </依存関係> <依存> <groupIdを> cn.xsshome </ groupIdを> <たartifactId> taip </たartifactId> <バージョン> 4.3.5 </バージョン> </依存関係> <! - 依存Fastjson - > <依存> <groupIdを> com.alibaba </ groupIdを> <たartifactId> fastjson </たartifactId> <バージョン> 1.2.58 </バージョン> </依存関係>
2.コードに従ってオンライン学習、通信ネットワークを取得したHTML
このセクションでは、RestTemplateを取得するために使用されます
パブリック 静的StuInfo parseURLを(文字列Vcode){ テンプレート残留レストテンプレート = 新しい休憩テンプレート(); 文字列のURL = "https://www.chsi.com.cn/xlcx/bg.do?vcode=" + vcode + "&SRCID = bgcx" ; 文字列HTML = restTemplate.getForObject(URL、文字列。クラス); リターンparseHtml(HTML)。 }
GETのこの部分はHTMLで、vcodeが学校することができ、それが教育を受けることができ
3.学校教育と情報分析
対応学校や教育vcodeしか解決することができます
/ ** *例外のキャプチャ動作を追加することをお勧めします、 *これは爬虫類を取得する方法があり、ページの変更後は、非ヌルチェックの分析部分は、あなたが例外をスローすることはありません * / プライベート 静的StuInfo parseHtml(文字列strHtml){ 文書DOC = Jsoup.parse(strHtml、 "UTF-8" )。 要素eleDiv2 = doc.getElementsByClass( "tableTitle" )。 もし(eleDiv2.text()( "学历"を含む。)){ リターンparseXueLi(strHtml)。 } 他の 場合には(。eleDiv2.text()が含まれている( "学籍" )){ リターンparseXueJi(strHtml)。 } リターン ヌル。 }
ロール分析:
/ ** *解析学校 * / プライベート 静的StuInfo parseXueJi(文字列strHtml){ 文書DOC = Jsoup.parse(strHtml、 "UTF-8" )。 要素eleDiv2 = doc.getElementsByClass( "DIV2" )。 もし(eleDiv2!= nullの &&!eleDiv2.isEmpty()){ 要素eleTd = eleDiv2.get(0).getElementsByTag( "TD" )。 もし(eleTd!= nullの &&!eleTd.isEmpty()){ StuInfo StuInfo = 新新StuInfo(); // 名前は、OCR認識を達成するために、画像、テンセントのAPI呼び出しで 文字列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())。 (eleTd.get(stuInfo.setLenOfSchooling 28 )の.textを())。 stuInfo.setType(eleTd.get( 30 )の.text())。 文字列[]ステータス = eleTd.get(32)の.text()スプリット( "\\("。 )。 stuInfo.setStatus(ステータス[ 0 ])。 stuInfo.setGraduationDate(ステータス[ 1] .substring(0、ステータス[1] .LENGTH() - 1 ))。 返すstuInfoを。 } } リターン ヌル。 }
教育分析:
/ ** *教育は解決しました * / プライベート 静的StuInfo parseXueLi(文字列strHtml){ 文書DOC = Jsoup.parse(strHtml、 "UTF-8" )。 要素eleDiv2 = doc.getElementsByClass( "DIV2" )。 もし(eleDiv2!= nullの &&!eleDiv2.isEmpty()){ 要素eleTd = eleDiv2.get(0).getElementsByTag( "TD" )。 もし(eleTd!= nullの &&!eleTd.isEmpty()){ StuInfo StuInfo = 新新StuInfo(); // 名前は、OCR認識を達成するために、画像、テンセントのAPI呼び出しで 文字列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()); // ステータスは絵で、テンセントAPIは、OCR認識を達成するために呼び出して 文字列statusImg = eleTd.get(13).getElementsByTag (0)を取得( "IMG").. ATTR( "SRC" )。 stuInfo.setStatus(aiOcr(statusImg))。 stuInfo.setPresident(eleTd.get( 14 )の.text())。 返すstuInfoを。 } } リターン ヌル。 }
注:このコードの一部は、第一の可能な例外を防止するために、再取得の値をチェックする必要があり、一般的に空でなく、非エンプティチェックするために添加されていません。ここでは単に個人的な娯楽、注文コードはとても州のこの部分を読みやすいです。
学校教育とのデータの一部が再び絵に解析され、あなたが認識OCRを得るために行う必要があり、aiOcr()関数は、OCR識別を行うために言いたいことが次のステップです。
特定のページが変更された場合、対応する必要性は、ページの変化を解析するために応じて調整することができます。
4.画像取得
画像内のOCR認識は、テンセント情報、依存taipクライアント・インタフェースと呼ばれます。:taipインターフェースは非常に強い、興味缶遊びですが、AIテンセントオープンプラットフォームを登録する必要があり、航空券テンセントAIのすべての機能が含まれていますhttps://ai.qq.com/product/nlpchat.shtml
/ ** *この場所は数回呼び出す必要があり、テンセントは、OCR時々システムがビジー状態の報告、正しい結果を毎回返さない、後ほど再度お試しください * / プライベート 静的文字aiOcr(文字列imgUrl){ 文字列のURL = "https://www.chsi.com.cn" + imgUrl。 TAipOcr aipOcr = 新しいTAipOcr(APP_ID、APP_KEY)。 してみてください{ 結果のString = aipOcr.handWritingOcrByUrl(URL); // FASTJSONが解決することができるときにエラー OcrResult ocrResult = JSONObject.parseObject(結果、OcrResult。クラス); リターン ocrResult.getData()getItem_list()GET(0 .. ).GetItemstring (); } キャッチ(例外e){ System.out.println( "エラー認識OCR" ); リターン "" ; } }
この場所を例外処理ロジックも補完される必要があり、相補的であるようには至っていません。
完全なコード:https://gitee.com/betterwgo/chsi_api