Java爬虫類シリーズの二ページ解析【爬取知乎トップページ情報】
前節では小さなDemoでJavaの爬虫類の旅を開始し,HttpClientリクエストリソースに慣れて戻り結果を得,初歩的な処理の結果を得た.しかし、得られたページはどのように解析されているのでしょうか.ここではJsoupの使用について議論します.
JsoupはJavaのHTML解析器で、非常に省力的なAPIを提供し、URL、ファイル、文字列からHTMLを簡単に解析し、DOMまたはSelectを使用してページ要素を選択し、データを取り出すことができます.次のようになります.
以上の方法でHTMLドキュメントを解析し、DOMメソッドを使用してドキュメントを巡回できます.
または、セレクタを使用して要素を検索することもできます.
.以下では、トップページのすべてのリンクを取得する例として、小さなプレゼンテーションを行います.
Documentを印刷することで解析TMLで得られた文書の内容情報を見ることができ,トップページに含まれるすべてのリンクには,ハイパーリンク形式、およびスクリプトなので、それぞれ3つの形式に対してリンクの抽出を行います。の3つの形式があることが分かった.
結果は次のとおりです.
参考資料:
1、Jsoup中国語ガイドhttp://www.open-open.com/jsoup/
JsoupはJavaのHTML解析器で、非常に省力的なAPIを提供し、URL、ファイル、文字列からHTMLを簡単に解析し、DOMまたはSelectを使用してページ要素を選択し、データを取り出すことができます.次のようになります.
String html = "First parse "
+ "Parsed HTML into a doc.
";
Document doc = Jsoup.parse(html);
Document doc = Jsoup.connect("http://www.zhihu.com").get(); //
以上の方法でHTMLドキュメントを解析し、DOMメソッドを使用してドキュメントを巡回できます.
または、セレクタを使用して要素を検索することもできます.
.以下では、トップページのすべてのリンクを取得する例として、小さなプレゼンテーションを行います.
Documentを印刷することで解析TMLで得られた文書の内容情報を見ることができ,トップページに含まれるすべてのリンクには,ハイパーリンク形式、およびスクリプトなので、それぞれ3つの形式に対してリンクの抽出を行います。の3つの形式があることが分かった.
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
/**
* ( )
*/
public class GetPageLinks {
public static void main(String[] args) throws IOException {
Validate.isTrue(args.length == 1, "Usage: supply url to fetch");
String url = args[0];
System.out.println("Fetching ..." + url);
Document document = Jsoup.connect(url).get();
// System.out.println(document);// HTML
Elements links = document.select("a[href]");
// System.out.println(links); // a[href]
Elements medias = document.select("[src]");
// System.out.println(medias); // 、 src
Elements imports = document.select("link[href]");
// System.out.println(imports);
print("Links: (%d)", links.size());
for(Element link : links){
print(" * a: (%s)", link.attr("abs:href"), trim(link.text(), 35));
}
print("Medias: (%d)", medias.size());
for(Element media : medias){
print(" * %s: ", media.tagName(), media.attr("abs:src"));
}
print("Imports: (%d)", imports.size());
for(Element imp : imports){
print(" * %s (%s)", imp.tagName(),imp.attr("abs:href"), imp.attr("rel"));
}
}
private static void print(String msg, Object... args){
System.out.println(String.format(msg, args));
}
private static String trim(String str, int width){
if(str.length() > width)
return str.substring(0, width+1) + ".";
else return str;
}
}
結果は次のとおりです.
Fetching ...http://www.zhihu.com
Links: (21)
* a: ( )
* a: ( )
* a: ( ?)
* a: ()
* a: ()
* a: ()
* a: ( App)
* a: (《 》)
* a: ( )
* a: ( )
* a: ( )
* a: ( )
* a: ( )
* a: ( )
* a: ( )
* a: ( ICP 110745 )
* a: ( )
* a: ( )
* a: ( )
* a: ( )
* a: ()
Medias: (7)
* script:
* img:
* img:
* script:
* script:
* script:
* script:
Imports: (14)
* link (apple-touch-icon)
* link (apple-touch-icon)
* link (apple-touch-icon)
* link (apple-touch-icon)
* link (shortcut icon)
* link (dns-prefetch)
* link (dns-prefetch)
* link (dns-prefetch)
* link (dns-prefetch)
* link (dns-prefetch)
* link (dns-prefetch)
* link (dns-prefetch)
* link (stylesheet)
* link (canonical)
参考資料:
1、Jsoup中国語ガイドhttp://www.open-open.com/jsoup/