日別アーカイブ: 2013年9月19日

jsoupを使ってみた

オープンソースのHTMLパーサー(Java)であるjsoupを軽く使ったのでメモ。

ざっとさわった特徴は

  • みんなが大好きMITライセンス
  • jQueryっぽく扱いが楽(少なくとも簡単な利用だと)
  • 今年の1月までは開発すすんでいた(今はとまっている??)
  • ソースは小さめかつきれいめなので手を入れることになっても難しくなさそう
  • クラス名はDocumentとかかなり一般的なので自動補完でインポートを追加しようとすると他のものが選ばれること多いので保管候補は目視で選びながらぺちぺち追加したほうがいい

インストールはMavenで指定かjarにパスを通すのみ。使ったバージョン1.7.2では依存ライブラリ無くひとつのjarで事足りた。

<dependencies>
 ……
<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.7.2</version>
</dependency>
 ……
</dependencies>

 

ぐりぐりとまわしながらJsoup.connect(url).get()とhtmlをクローラー的に取得していたら

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)

な感じにエクセプション発生

Jsoup.connect(url).timeout(0).get();

 としてとりあえずは回避。コネクション使いきっている状態と思うので運用機とかで使うなら

org.jsoup.helper.HttpConnectionの中いじるか、ulimitとか調整した方がいいと思う。