【Jsoup】HTMLパーサー、Webコンテンツを簡単に取得_html/css_WEB-ITnose

WBOY
リリース: 2016-06-21 09:00:50
オリジナル
1341 人が閲覧しました

Jsoup の概要

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

Jsoup.jpg

公式 Web サイトのアドレス: http://jsoup.org/

から jsou-1.8.3.jar ファイルをダウンロードします。公式 Web サイトにアクセスし、独自のプロジェクトの lib ライブラリに追加すると、Jsoup が提供する API を使用できます。公式 Web サイトには、開発者が学習できる一連の使用ガイド (Cookbook) も提供されています。

Jsoup は HTML を解析して Document オブジェクトを取得し、Document のプロパティを操作することで HTML ページのコンテンツを取得します。そのため、開始する前に、まず、ノード、要素、などの関連する概念の違いを紹介します。概念の混乱が誤用につながるのを防ぐため、XML で文書化します。

関連概念

  • Jsoup の継承関係
public abstract class Node implements Cloneable
ログイン後にコピー
public class Element extends Node
ログイン後にコピー
public class Document extends Element
ログイン後にコピー

の 3 つの定義からわかります。 Jsoup ソースコード 以下のようなツリー継承関係が生成されます。

Node, Element, Document 継承関係.png

  1. Node (ノード) が導出されます上記の継承関係から明らかなように、ドキュメント内のすべてのコンテンツはノードと見なすことができます。ノードには、属性ノード(Attribute)、ノートノード(Note)、テキストノード(Text)、要素ノード(Element)など、さまざまな種類があります。一般に、ノードはこれらのさまざまなノードの総称です。

  2. Element (要素) 要素はノードに比べて狭い範囲で定義されます。要素はノードから継承し、ノードのサブセットであるため、要素もノードであり、ノードが所有するパブリック プロパティとメソッドも要素内で使用できます。

  3. Document (ドキュメント) 要素から継承され、HTML ドキュメント全体のソース コードの内容を参照します。System.out.println( を通じてコン​​ソールに出力できます。 document.toString()); Web ページのソース コードのコンテンツ。

  4. 相互変換は、ノード、要素、ドキュメント間の「絡み合った」関係に基づいており、各クラスで提供されるメソッドを使用して、使用する必要なオブジェクトを適切に変換して取得できます。

使用例

Jsoup が HTML を解析して Document オブジェクトを取得する方法は、オンライン URL、HTML テキスト文字列、ファイルの 3 つのカテゴリに分類されます。対応する API は次のとおりです。

  • connect(String url)

  • parse(String html)

  • parse(File in, String charsetName)

Document オブジェクトを取得した後、それを HTML ソース コードと結合し、Jsoup が提供する API を使用して、クラス、タグ、ID を通じて対応する要素を取得できます。 、属性、およびその他の関連属性を使用して、必要な Web ページのコンテンツを取得します。

以下では、Jsoup の公式 Web サイトのクックブック ページを例として、ページ ディレクトリのコンテンツを解析して取得します。

Web ページのコンテンツ:

Jsoup Cookbook Web page.jpg

Web ページのソース コード:

<!DOCTYPE html><!-- saved from url=(0031)http://www.open-open.com/jsoup/ --><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>jsoup开发指南,jsoup中文使用手册,jsoup中文文档</title><meta name="keywords" content="jsoup开发指南,jsoup中文使用手册,jsoup中文文档,jsoup java html解析器"><meta name="description" content="jsoup Cookbook中文版 - 由http://www.open-open.com翻译整理"><link rel="stylesheet" type="text/css" href="./jsoup开发指南,jsoup中文使用手册,jsoup中文文档_files/style.css"></head><body class="n1-cookbook"><div class="wrap"><div class="header"><div class="nav-sections"><ul>  <li class="n1-home">  <h4><a href="http://jsoup.org/">jsoup</a></h4></li>  <li class="n1-news"><a href="http://jsoup.org/news/">新闻</a></li>  <li class="n1-bugs"><a href="http://jsoup.org/bugs">bugs</a></li>  <li class="n1-discussion"><a href="http://jsoup.org/discussion">讨论</a></li>  <li class="n1-download"><a href="http://jsoup.org/download">下载</a></li>  <li class="n1-api"><a href="http://jsoup.org/apidocs/">api参考</a></li>  <li class="n1-cookbook"><a href="http://jsoup.org/cookbook/">Cookbook</a></li></ul></div></div><div class="breadcrumb"><a href="http://jsoup.org/">jsoup</a> <span class="seperator">&raquo;</span> cookbook </div><div class="content"><div class="col1"><h1>jsoup Cookbook(中文版)</h1><div class="toc"><h3>入门</h3><ol start="1">  <li><a href="http://www.open-open.com/jsoup/parsing-a-document.htm">解析和遍历一个html文档</a></li></ol><h3>输入</h3><ol start="2">  <li><a href="http://www.open-open.com/jsoup/parse-document-from-string.htm">解析一个html字符串</a></li>  <li><a href="http://www.open-open.com/jsoup/parse-body-fragment.htm">解析一个body片断</a></li>  <li><a href="http://www.open-open.com/jsoup/load-document-from-url.htm">根据一个url加载Document对象</a></li>  <li><a href="http://www.open-open.com/jsoup/load-document-from-file.htm">根据一个文件加载Document对象</a></li></ol><h3>数据抽取</h3><ol start="6">  <li><a href="http://www.open-open.com/jsoup/dom-navigation.htm">使用dom方法来遍历一个Document对象</a></li>  <li><a href="http://www.open-open.com/jsoup/selector-syntax.htm">使用选择器语法来查找元素</a></li>  <li><a href="http://www.open-open.com/jsoup/attributes-text-html.htm">从元素集合抽取属性、文本和html内容</a></li>  <li><a href="http://www.open-open.com/jsoup/working-with-urls.htm">URL处理</a></li>  <li><a href="http://www.open-open.com/jsoup/example-list-links.htm">程序示例:获取所有链接</a></li></ol><h3>数据修改</h3><ol start="11">  <li><a href="http://www.open-open.com/jsoup/set-attributes.htm">设置属性值</a></li>  <li><a href="http://www.open-open.com/jsoup/set-html.htm">设置元素的html内容</a></li>  <li><a href="http://www.open-open.com/jsoup/set-text.htm">设置元素的文本内容</a></li></ol><h3> html清理</h3><ol start="14">  <li><a href="http://www.open-open.com/jsoup/whitelist-sanitizer.htm">消除不受信任的html (来防止xss攻击)</a></li></ol><script src="./jsoup开发指南,jsoup中文使用手册,jsoup中文文档_files/ca-pub-7963911354665843.js"></script><script type="text/javascript"><!--google_ad_client = "pub-7963911354665843";/* 728x90, 创建于 11-1-27 */google_ad_slot = "5890482646";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="./jsoup开发指南,jsoup中文使用手册,jsoup中文文档_files/show_ads.js"></script><ins id="aswift_0_expand" style="display:inline-table;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:728px;background-color:transparent"><ins id="aswift_0_anchor" style="display:block;border:none;height:90px;margin:0;padding:0;position:relative;visibility:visible;width:728px;background-color:transparent"><iframe width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" onload="var i=this.id,s=window.google_iframe_oncopy,H=s&&s.handlers,h=H&&H[i],w=this.contentWindow,d;try{d=w.document}catch(e){}if(h&&d&&(!d.body||!d.body.firstChild)){if(h.call){setTimeout(h,0)}else if(h.match){try{h=s.upd(h,i)}catch(e){}w.location.replace(h)}}" id="aswift_0" name="aswift_0" style="left:0;position:absolute;top:0;"></iframe></ins></ins></div></div><div class="col2"></div></div><div class="footer"><b>jsoup</b> html parser: copyright &copy; 2009 - 2011 <a href="http://www.open-open.com/" rel="me"><b>jonathan hedley</b></a> </div></div></body></html>
ログイン後にコピー

Jsoup の解析:

import java.io.IOException;import java.text.ParseException;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.select.Elements;/** * @author 亦枫 * @created_time 2016年1月5日 * @file_user_todo Java测试类 * @blog http://www.jianshu.com/users/1c40186e3248/latest_articles */public class JavaTest {    /**     * 入口函数     * @param args     * @throws ParseException     */    public static void main(String[] args) throws ParseException {        try {            //解析Url获取Document对象            Document document = Jsoup.connect("http://www.open-open.com/jsoup/").get();            //获取网页源码文本内容            System.out.println(document.toString());            //获取指定class的内容指定tag的元素            Elements liElements = document.getElementsByClass("content").get(0).getElementsByTag("li");            for (int i = 0; i < liElements.size(); i++) {                System.out.println(i + ". " + liElements.get(i).text());            }        } catch (IOException e) {            System.out.println("解析出错!");            e.printStackTrace();        }    }}
ログイン後にコピー

解析結果:

Jsoup parse result.png

著者のヘッドライン アカウントへの購読を歓迎します: Technology Bird Yifeng WeChat 公開アカウント [Technical Bird]、態度のある技術公開アカウントをフォローすることを歓迎します。

テクノロジー Bird_WeChat QR code.gif

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート