2016年6月2日木曜日

Raspberry PiとPythonでスクレイピングをする

Raspberry Piでスクレイピングを試したので、実際にスクレイピングするまでRaspberry Piで行ったことをまとめる。スクレイピングの処理はPython3でコーディングした。

1.Raspberry PiのPython環境の確認
まずはRaspberry PiにインストールされているPythonを確認する。Pythonには2系と3系があり、Raspberry Piにははじめから両系ともインストールされている。とりあえずバージョンを確認。

Python2系のバージョン確認

Python3系のバージョン確認


2.pipのインストール
pipはPythonのパッケージ管理システム。スクレイピングするためにはHTMLなどを解析する必要があるが、それを行ってくれるライブラリであるBeautifulsoup4をインストールする。ただ、Raspberry PiではPython2系がデフォルトになっているので、apt-getでインストールするとPython2系にインストールされてしまうらしい。今回はPython3系を使いたいので、pipでBeautifulsoup4をインストールする。 pipにも2系と3系がある。 pip3系のインストールは以下のコマンド。


ちなみにpip3系のコマンドはpip3ではない。実行ファイルを確認するとpip-3.2。


3.Beautifulsoup4のインストール
ここでようやくHTML解析ライブラリであるBeautifulsoup4のインストール。


4.Pythonでのコーディング
このブログ記事をスクレイピングしてみる。Beautifulsoup4の使い方は、Beautofulsoup4のドキュメントのページにサンプルコードがある。idやclassで収集対象を絞れるし、正規表現も使える。

ブログタイトルを取得する場合、HTMLは以下のようになっているので、classが「entry-title」のh3タグを指定すればタイトルが取得できそう。

Raspberry Pi+nginx環境にPHP5をインストールする


タイトルの他に、ブログ投稿内の1番目のspanタグのテキストも取得するコードは以下の通り。
# ライブラリの読み込み
from urllib.request import urlopen
from bs4 import BeautifulSoup

# スクレイピングするページのurl 
reviewUrl = 'http://irukanobox.blogspot.jp/2016/05/raspberry-pinginxphp5.html'

# 指定したurlからデータを読み込む
htmlData = urlopen( reviewUrl ).read()
# パーサーに「html.parser」を指定してデータを解析
htmlParsed = BeautifulSoup( htmlData, 'html.parser' )

# classに「entry-title」が指定されているh3タグのテキストを表示
print( htmlParsed.find( 'h3', class_='entry-title' ).text )

# findAllを使うと、条件に一致するものすべてをlist型で取得できる
# ブログ記事内の1番目のspanタグのテキストを表示
print( htmlParsed.find( 'div', class_='entry-content' ).find( 'div' ).findAll( 'span' )[0].text )

結果は以下の通り。

0 件のコメント:

コメントを投稿