Jsoup を使用して HTML_html/css_WEB-ITnose を解析および操作する

WBOY
リリース: 2016-06-24 11:40:02
オリジナル
1109 人が閲覧しました

jsoup の概要

jsoup は、URL アドレスと HTML テキスト コンテンツを直接解析できる Java HTML パーサーです。これは、DOM、CSS、および jQuery のような操作メソッドを通じてデータを取得および操作するための、非常に低労力の API を提供します。

jsoup の主な機能は次のとおりです:

1. URL、ファイル、または文字列から HTML を解析します。
2. DOM または CSS セレクターを使用してデータを検索し、取得します。
3. HTML 要素、属性、およびテキストを操作します。 ;

jsoup は MIT ライセンスに基づいてリリースされており、商用プロジェクトで安心して使用できます。

jsoup の主要なクラス階層を以下の図に示します。



次に、特にいくつかの一般的なアプリケーション シナリオに焦点を当て、jsoup がどのように HTML ドキュメントをエレガントに処理できるかを説明します。

ドキュメント入力

jsoup は、文字列、URL アドレス、ローカル ファイルから HTML ドキュメントをロードし、Document オブジェクト インスタンスを生成できます。

以下は関連するコードです:

// 直接从字符串中输入 HTML 文档String html = "<html><head><title>开源中国社区</title></head>"  + "<body><p>这里是 jsoup 项目的相关文章</p></body></html>";Document doc = Jsoup.parse(html); // 从URL直接加载 HTML 文档Document doc = Jsoup.connect("http://www.oschina.net/").get();String title = doc.title(); Document doc = Jsoup.connect("http://www.oschina.net/")  .data("query", "Java")   //请求参数  .userAgent("I’m jsoup") //设置User-Agent  .cookie("auth", "token") //设置cookie  .timeout(3000)           //设置连接超时时间  .post();                 //使用POST方法访问URL // 从文件中加载 HTML 文档File input = new File("D:/test.html");Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");
ログイン後にコピー


最後の HTML ドキュメント入力メソッドの parse の 3 番目のパラメーターに注意してください。なぜここで URL を指定する必要があるのですか (最初と同様に指定することはできません)。方法) ? HTML ドキュメントには多くのリンク、画像、参照される外部スクリプト、CSS ファイルなどが含まれるため、baseURL という名前の 3 番目のパラメータは、HTML ドキュメントが相対パスを使用して外部ファイルを参照するときに、jsoup が自動的にこれらの URL を使用することを意味します。接頭辞としてbaseURLが付きます。

たとえば、オープン ソース ソフトウェアオープン ソース ソフトウェア に変換されます。

HTML 要素を解析して抽出する

このパートでは HTML パーサーの最も基本的な機能が含まれますが、jsoup は他のオープン ソース プロジェクトとは異なるセレクターを使用します。このパートでは、jsoup の選択について詳しく説明します。このセクションでは、jsoup が最も単純なコードでどのように実装されるかを説明します。

ただし、jsoup は従来の DOM 要素分析も提供します。次のコードを見てください。

File input = new File("D:/test.html");Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/"); Element content = doc.getElementById("content");Elements links = content.getElementsByTag("a");for (Element link : links) {  String linkHref = link.attr("href");  String linkText = link.text();}
ログイン後にコピー


jsoup のメソッドは JavaScript と同じメソッド名であると思われるかもしれません。機能も完全に一貫しています。ノード名または HTML 要素の ID に基づいて、対応する要素または要素リストを取得できます。

htmlparser プロジェクトとは異なり、jsoup は HTML 要素に対応するクラスを定義しません。通常、HTML 要素のコンポーネントには、ノード名、属性、テキストが含まれます。これは、これらのデータを自分で取得するための簡単なメソッドです。 jsoup がスリムなままである理由もここにあります。

要素の取得に関しては、jsoup のセレクターは単純に万能です。

File input = new File("D:\test.html");Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/"); Elements links = doc.select("a[href]"); // 具有 href 属性的链接Elements pngs = doc.select("img[src$=.png]");//所有引用png图片的元素  Element masthead = doc.select("div.masthead").first();// 找出定义了 class=masthead 的元素 Elements resultLinks = doc.select("h3.r > a"); // direct a after h3
ログイン後にコピー


これが、jsoup が要素を取得するために jQuery と同じセレクターを使用する点です。他の HTML に切り替えると、インタプリタの場合、少なくとも多くのコード行が必要ですが、jsoup は 1 行のコードだけで完了します。


jsoup のセレクターは式関数もサポートしています。この超強力なセレクターについては最後のセクションで紹介します。

データの変更
ドキュメントの解析中に、ドキュメント内の一部の要素を変更する必要がある場合があります。たとえば、ドキュメント内のすべての画像にクリック可能なリンクを追加したり、リンク アドレスを変更したり、テキストを変更したりすることができます。 。

ここにいくつかの簡単な例を示します:

doc.select("div.comments a").attr("rel", "nofollow");//为所有链接增加 rel=nofollow 属性 doc.select("div.comments a").addClass("mylinkclass");//为所有链接增加 class=mylinkclass 属性 doc.select("img").removeAttr("onclick"); //删除所有图片的onclick属性 doc.select("input[type=text]").val(""); //清空所有文本输入框中的文本
ログイン後にコピー


理由は非常に簡単です。jsoup のセレクターを使用して要素を見つけるだけで済み、タグ名を除いて上記の方法で要素を変更できます。要素の属性やテキストを含めて変更することはできません (削除してから新しい要素を挿入できます)。


変更後、要素の html() メソッドを直接呼び出して、変更された HTML ドキュメントを取得できます。

HTML ドキュメントのクリーニング
jsoup は、ユーザーフレンドリーでありながら強力な API を提供するという点で素晴らしい仕事をします。 Webサイトを構築する際、ユーザーからのコメント機能が設けられることが多いです。一部のユーザーは悪意があり、コメント コンテンツにいくつかのスクリプトを追加します。これらのスクリプトはページ全体の動作を破壊する可能性があり、さらに深刻なことに、XSS クロスサイト攻撃などの機密情報を入手する可能性があります。

jsoup はこの点に関して非常に強力なサポートを備えており、使い方は非常に簡単です。次のコードを見てください:

String unsafe = "<p><a href='http://www.oschina.net/' onclick='stealCookies()'>开源中国社区</a></p>";String safe = Jsoup.clean(unsafe, Whitelist.basic());// 输出: // <p><a href="http://www.oschina.net/" rel="nofollow">开源中国社区</a></p>
ログイン後にコピー
jsoup は、HTML ドキュメントをフィルタリングするために Whitelist クラスを使用します。 このクラスは、いくつかの一般的なメソッドを提供します:

これら 5 つのフィルタのどれも要件を満たさない場合はどうなりますか。 Flash アニメーションを挿入しても構いません。ホワイトリストには、whitelist.addTags("embed","object","param","span","div"); などの拡張機能が用意されています。また、addAttributes を呼び出して属性を追加することもできます。特定の要素に。

jsoup の優れているところは?? セレクター

先ほど、jsoup がセレクターを使用して要素を取得する方法を簡単に紹介しました。このセクションでは、セレクター自体の強力な構文に焦点を当てます。次の表は、jsoup セレクターのすべての構文の詳細なリストです。

基本的な使用法

上記は最も基本的なセレクター構文です。これらの構文は、jsoup でサポートされている組み合わせで使用することもできます。

いくつかの基本的な構文とこれらの組み合わせに加えて。構文、jsoup も式を使用した要素フィルターの選択をサポートします。以下は、jsoup でサポートされているすべての式のリストです:

概要
ここでは jsoup の基本的な機能を紹介しましたが、jsoup の優れた拡張性 API 設計により、次の定義を通じて開発できます。 selectors 非常に強力な HTML 解析機能。また、jsoup プロジェクト自体の開発も活発なので、Java を使用していて HTML の処理が必要な場合は、試してみるとよいでしょう。

上記はオープンソースの中国語コミュニティからの抜粋です:

添付ファイル:

jsoup オンライン API: jsoup 1.6.3 API

jsoup 開発ガイド

著作権に関する声明: この記事はブロガーによって書かれています。オリジナルの記事はブロガーの許可なしに転載することはできません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!