PythonでスクレイピングといえばBeautifulSoupを使うのがポピュラーだと思いますが、jQuery風のセレクタを使えるPyQueryというライブラリもあると知ったので試してみました。
思いついたセレクタを適当使ってみた感じ、結構わかりやすくていいかも
# coding=utf-8 from pyquery import PyQuery q = PyQuery(u""" <a id="top_link" class="current" href="/">トップへ</a> <a id="recent_link" href="/recent">最近のエントリ</a> <a id="popular_link" href="/popular">人気のエントリ</a> """) # id assert len(q('a#recent_link')) == 1 assert q('a#recent_link').text() == u'最近のエントリ' # class assert len(q('a.current')) == 1 assert q('a.current').text() == u'トップへ' # :first assert len(q('a:first')) == 1 assert q('a:first').text() == u'トップへ' # :last assert len(q('a:last')) == 1 assert q('a:last').text() == u'人気のエントリ' # :even assert len(q('a:even')) == 2 assert q('a:even').text() == u'トップへ 人気のエントリ' # :odd assert len(q('a:odd')) == 1 assert q('a:odd').text() == u'最近のエントリ' # :gt assert len(q('a:gt(0)')) == 2 assert q('a:gt(0)').text() == u'最近のエントリ 人気のエントリ' # :lt assert len(q('a:lt(1)')) == 1 assert q('a:lt(1)').text() == u'トップへ' # :eq assert len(q('a:eq(2)')) == 1 assert q('a:eq(2)').text() == u'人気のエントリ'
上記の例だと文字列をPyQueryに渡してますが、urlを渡すとドキュメントを取ってきてくれます
# coding=utf-8 from pyquery import PyQuery q = PyQuery('http://d.hatena.ne.jp/yuheiomori0718/') assert q('h1 > a:first').text() == 'brainstorm'