まめりうむ

WindowsからMacへ乗り換るためのネタをまとめたり好きなことをまとめたり。

*

Pythonのlxmlモジュールをインストールする

   

スポンサーリンク

Pythonの勉強のためにYahoo!の検索結果からタイトルとリンクを抽出するPythonスクリプトを作成中です。

とりあえず検索結果のHTMLを取得するとこまではさっくりと出来て、あとはこのHTMLから必要なデータを抽出するだけ。

ちなみに、こーゆーHTMLから必要なデータを抽出したりすることをHTML解析(HTMLパース)って言うんですね。

この単語を知ってればもう少し早く答えが見つかったかも知れません…w

で、PythonでHTML解析をするにはサードパーティのlxmlモジュールを使うのが便利らしいので早速インストールします。

Pythonのモジュール管理には専用のパッケージ管理システムpipをインストールするのが良いらしいので、まずはそちらから。

事前準備(Windowsのみ)

pipをインストールするためにeasy_installというパッケージを使います。

Macには最初からインストールされてるんですが、Windowsにはインストールされていないため、Windowsでeasy_installするためには事前準備が必要です。

Widowsでeasy_installとpipを使えるようにするためにはコチラの記事が参考になります。

pipのインストール

ターミナルを開いて

sudo easy_install pip

これでOK。

pipのカンタンな使い方

使い方 コマンド
インストール済のパッケージ一覧を表示 pip freeze
パッケージの検索 pip search パッケージ名
パッケージのインストール pip install パッケージ名
パッケージのアンインストール pip uninstall パッケージ名

手動でパッケージ管理するより断然便利そうですw

lxmlのインストール

pipのインストールが出来たら

 pip install lxml 

でlxmlをインストールします(ちょっと時間かかります)。

lxmlを使って欲しい情報を抽出

lxmlの詳しい使い方はコチラの記事がとても勉強になります。

今回やりたいことを具体的にすると検索結果のHTMLからid=”web”となる<div>ブロック内の<a>タグから必要な情報を引っ張ってくることなんですが、こーゆー時にはxpathメソッドが使えるみたいです。

xpathは

XML Path Language (XPath; XMLパス言語) は、マークアップ言語 XML に準拠した文書の特定の部分を指定する言語構文である。(Wikipediaより)

とのことで、XMLに限らず構造化されたマークアップから情報を抽出するためによく使われるみたいです。

ただ、正直Xpathの細かいコトはわからないので(苦笑)、この辺を参考にSublime REPLで色々試したところ

xpath("//div[@id='web']//li/a")

という感じでxpathを指定することで検索結果の<a>タグのリストが抽出出来ました。

あとは抽出出来たリストからタイトルとリンクを抽出するだけです。

xpathメソッドで返されるオブジェクト(lxml.html.HtmlElement型)には、タグの属性値を取得するattribメソッドとタグで囲まれたテキストを取得するtext_content()メソッドがあるので、これを抽出出来たリストに使えば目的達成です。

ちなみに、テキストを取得するにはtextメソッドというものもありますが、コチラはタグが入れ子になってると取得できないので今回は使えませんでした。

最終版

ということで動作確認出来た最終版がコチラになります。

# -*- coding: utf-8 -*-

import urllib2
import lxml.html


def main():

	url = 'http://search.yahoo.co.jp/search?p=[検索ワード]
	&ei=UTF-8'
	request = urllib2.urlopen(url)
	html = unicode(request.read(), 'utf-8')

	dom = lxml.html.fromstring(html)	# HTMLをDOMツリーに

	a_list = dom.xpath("//div[@id='web']//li/a")	# <div id="web">の子要素の<li>の子要素の<a>をすべて抽出
	for i, j in enumerate(a_list):
		result = str(i + 1) + '. ['
		result += j.text_content() + ']('	# <a>タグのテキストノード(リンクタイトル)を取得
		result += j.attrib['href'] + ')'	# <a>タグのhref属性値(URL)を取得
		print result

	request.close()

if __name__ == '__main__':
	main()

標準モジュールで全てやろうとするとちょっと面倒くさそうでしたが便利なサードパーティモジュールを使えばあっという間でしたw

pythonにはこーゆー便利なサードパーティモジュールが一杯ありそうなのが魅力ですね。

大抵の情報はネットで探せそうなので、あとは検索テクニックを磨くことがポイントになりそうですw

 - プログラミング ,

スポンサーリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  関連記事

JForexで注文画面を自作する(ブレイクアウト注文)

前回まででカンタンですが結構使い勝手の良い指値・逆指値注文まで出来ました。 今回 …

Pythonチュートリアルを読みました

Pythonを勉強するにあたって、最初にPythonスタートブックという本を読み …

Pythonのwith文

このところ興味の矛先がPythonからRaspberry Piに移りつつあります …

JForexで注文画面を自作する

NDD方式で約定力の高さが魅力のJForexですが、注文画面がちょっと使いにくく …

Pythonでニコ生アラートを作る(放送通知サーバのステータス確認と接続情報の取得)

このところプログラミングしたい病が発生していて、ひっそりとPythonでニコ生ア …

Sublime Text3でPython開発環境を整えるためにインストールしたパッケージと設定

Sublime Text3でPythonのお勉強をするのに役立ちそうなパッケージ …

JForexで注文画面を自作する(スプレッド表示と新規注文時のオプション)

前回までで成行注文と全決済が出来るようになったので、今回はもう少し使い勝手を良く …

JForexで注文画面を自作する(成行注文と全決済)

まずは成行注文と全決済が出来るようにしたいと思います。 GUIのパーツはEcli …

JForexで注文画面を自作する(指値・逆指値注文)

前回までで一応成行注文に最低限欲しい機能は付けられましたので、今回は指値・逆指値 …

JForexで注文画面を自作する(新規注文に有効期限を設定)

前回作成した指値・逆指値注文画面のときにまとめて作ってしまえば良かったんですが忘 …