「HTMLからリンクを抽出する」
HTMLからリンクを抽出する処理を書く必要があったので、そこで書いたコードを
サンプルとしてちょっと公開。(実際に書いたコードとは若干違いますが)
ここでは、はてなブックマークの人気エントリーからリンクを抽出するようにしています。
HTMLの取得から解析までhtmlparserのライブラリがやってくれるので、非常に
使い勝手がいいです。java.netパッケージや正規表現を使用しても同じことは
出来ますが、それなりに面倒ですから。
import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.htmlparser.Node; import org.htmlparser.Parser; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.SimpleNodeIterator; public class HatenaBookmarkParser { private List searchList = new ArrayList(); /** * @param args */ public static void main(String[] args) { HatenaBookmarkParser parser = new HatenaBookmarkParser(); parser.parse(); List list = parser.getResultList(); for (Iterator iter = list.iterator(); iter.hasNext();) { Map element = (Map) iter.next(); System.out.println(element); } } public void parse() { try { TagNameFilter anchorFilter = new TagNameFilter("A"); HasAttributeFilter attrFilter = new HasAttributeFilter("class", "bookmark"); AndFilter filter = new AndFilter(anchorFilter, attrFilter); Parser parser = new Parser("http://b.hatena.ne.jp/hotentry"); NodeList list = parser.parse(filter); SimpleNodeIterator it = list.elements(); while (it.hasMoreNodes()) { Node node = it.nextNode(); LinkTag tag = (LinkTag) node; String url = tag.extractLink(); Map map = new HashMap(); map.put("URL", url); map.put("TEXT", tag.getLinkText()); searchList.add(map); } } catch (Exception e) { e.printStackTrace(); } } public List getResultList() { return searchList; } }
このコードを実行すると、以下のような結果を出力します。
#一部だけ抜粋。
{URL=http://2xup.org/log/2006/04/28-2323, TEXT=Photoshop で背景透過の美しい favicon を作成する - 2xup} {URL=http://www.atmarkit.co.jp/fwcr/rensai/ajax_php02/01.html, TEXT=Ajaxを使ったファイルマネージャをPHPで作ろう - @IT}