ホームページ >ウェブフロントエンド >htmlチュートリアル >HTMLParserの使い方を詳しく解説(1)
検索エンジンの開発を研究する場合、HTML Web ページの処理は中核的なリンクです。インターネット上には多くのオープン ソース コードがあり、Java の場合は HTMLParser がよく知られており、広く使用されています。 HTMLParser のホームページは http://htmlparser.sourceforge.net/ で、最後の更新は 2006 年 9 月のバージョン 1.6 でした。しかし、それは問題ではありません。HTML の内容は長い間大幅に変更されておらず、HTMLParser は基本的に問題なく処理できます。 HTMLParser には、コンパクトで高速であるという利点があります。欠点は、関連するドキュメントが比較的少なく (英語のドキュメントも少ない)、多くの機能を自分で調べる必要があることです。初心者にとってはまだ多少の努力が必要ですが、一度使い始めると、HTMLParser の構造設計が非常に賢くて非常に実用的であり、基本的にさまざまなニーズを満たすことができることがわかります。
ここでは、HTMLParser を初めて使用する友人に役立つことを願って、過去数か月間での私の経験に基づいていくつかの入門的なものを書きました。 (ただし、私の中国語テストは大学入学試験の合格点よりわずか 1 点高かったので、文法的な問題については我慢していただければと思います)
HTMLParser のコア モジュールは org.htmlparser.Parser クラスです。実際に HTML ページの分析が完了します。このクラスには次のコンストラクターがあります:
public Parser (); public Parser (Lexer lexer, ParserFeedback fb); public Parser (URLConnection connection, ParserFeedback fb) throws ParserException; public Parser (String resource, ParserFeedback feedback) throws ParserException; public Parser (String resource) throws ParserException; public Parser (Lexer lexer); public Parser (URLConnection connection) throws ParserException; 和一个静态类 public static Parser createParser (String html, String charset);
ほとんどのユーザーにとって、最も一般的に使用される方法は、URLConnection または Web ページのコンテンツを保持する文字列を介してパーサーを初期化するか、静的関数を使用してパーサー オブジェクトを生成することです。 ParserFeedback のコードは非常にシンプルで、分析プロセスのデバッグと追跡のために設計されており、通常は変更する必要はありません。 Lexer の使用は比較的高度なトピックなので、後で説明します。
ここでさらに興味深い点は、ページのエンコード方法を設定する必要がある場合、唯一の方法は Lexer を使用せずに静的関数を使用することであるということです。ほとんどの中国語ページでは、これをより頻繁に使用する必要がある方法のようです。
以下はParserを初期化する例です。
/** * @author www.baizeju.com */ package com.baizeju.htmlparsertester; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java.io.File; import java.net.HttpURLConnection; import java.net.URL; import org.htmlparser.visitors.TextExtractingVisitor; import org.htmlparser.Parser; /** * @author www.baizeju.com */ public class Main { private static String ENCODE = "GBK"; private static void message( String szMsg ) { try{ System.out.println(new String(szMsg.getBytes(ENCODE), System.getProperty("file.encoding"))); } catch(Exception e ){} } public static String openFile( String szFileName ) { try { BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) ); String szContent=""; String szTemp; while ( (szTemp = bis.readLine()) != null) { szContent+=szTemp+"/n"; } bis.close(); return szContent; } catch( Exception e ) { return ""; } } public static void main(String[] args) { String szContent = openFile( "E:/My Sites/HTMLParserTester.html"); try{ //Parser parser = Parser.createParser(szContent, ENCODE); //Parser parser = new Parser( szContent ); Parser parser = new Parser( (HttpURLConnection) (new URL("http://127.0.0.1:8080/HTMLParserTester.html")).openConnection() ); TextExtractingVisitor visitor = new TextExtractingVisitor(); parser.visitAllNodesWith(visitor); String textInPage = visitor.getExtractedText(); message(textInPage); } catch( Exception e ) { } } }
強調された部分は、いくつかの異なる初期化メソッドをテストしており、結果は以下に示されています。パーサーがコンテンツを出力できることがわかる限り、パーサーのコンテンツにアクセスする方法については後で説明します。
上記は HTMLParser の使用方法の詳細な説明 (1) です。さらに関連するコンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。