PyQueryによるWebスクレイピング -クイックスタート-


株式市場に関連したビッグデータを利用してデータ分析を行いたく、WebスクレイピングやDB構築について調べたので投稿します。

PyQueryによるWebスクレイピング

Webスクレイピングとは一言でいうと、Webサイトから情報を自動で取得する技術です。
今回はPythonのライブラリ「PyQuery」を利用して株探(https://kabutan.jp/)のページから銘柄情報などを取得しました。

インストール

pip install pyquery

PyQueryインスタンスを生成

pyquery.py
from pyquery import PyQuery as pq

## トヨタ(銘柄コード:7203)のページのhtmlオブジェクトを取得
code = 7203  
url = 'https://kabutan.jp/stock/?code={}'.format(code)

data = pq(url)

print(data)  # 取得したhtml情報を表示
# <html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" xml:lang="ja">
# <head>
# <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
# <meta http-equiv="Content-Style-Type" content="text/css" />
# <meta http-equiv="Content-Script-Type" content="text/javascript" />
# <title>トヨタ自動車 (トヨタ) 【7203】:株価・株式情報 | 株探</title>
# ...(以下略)

タグを取得

get_tag.py
## titleタグを取得して表示
print(data('title'))
# <title>トヨタ自動車 (トヨタ) 【7203】:株価・株式情報 | 株探</title>

## もしくはこっちもOK。上の操作と同じ
# print(data.find('title'))

ここから「トヨタ自動車」の文字列情報を抜き出すには、text()メソッドなどを利用して下記のようにするとOKです。

get_tag2.py
print(data('title').text().split()[0])
# トヨタ自動車

idを取得

get_id.py
## id = "stckinfo_i2" の要素を取得して表示
print(data('#stockinfo_i2'))
# <div id="stockinfo_i2">
# 
# (中略)
# 
# <div>
# <a href="/themes/?industry=17&amp;market=1">輸送用機器</a>
# </div>
# <dl>
#   <dt>単位</dt>
#   <dd>100株 </dd>
# </dl>
# 
# (中略)
# 

ここから以下のようにして業種と単元株数を取得します。

get_id2.py
print(data('#stockinfo_i2')('a').text())
# 輸送用機器

print(data('#stockinfo_i2')('dl').text().split()[2])
# 100株

クラスを取得

get_class.py
## class = "si_i1_1" の要素を取得して表示
print(data('.si_i1_1'))
# <div class="si_i1_1">
# <h2><span>7203</span>トヨタ自動車</h2>
# <span class="market">東証1</span>
# <time datetime="2019-02-01T15:00+09:00">15:00</time>
# </div>

ここから以下のようにして上場市場などを取得します。

get_class2.py
print(data('.si_i1_1')('h2')('span').text())
# 7203

print(data('.si_i1_1')('h2').remove('span').text())
# トヨタ自動車
## removeした要素には以降アクセスできなくなるため注意!

print(data('.si_i1_1')('.market').text())
# 東証1

終わりに

以上でPyQueryのクイックスタートを終わります。
Beautiful Soup についても今度触ってみて記事にしたいと思います。
この後は自動取得した銘柄データをSQLiteなどに格納してデータベースを作成していきます。
記事を作成したらリンクを載せる予定です。