Seleniumを使ったスクレイピング

えー以前からUdemyと呼ばれるオンライン学習プログラムで勉強する為に色々と教材を買っていましたが、買ってそのままというのが常態化してきたので最近消化し始めました今日この頃です。

なので今回はUdemyで学習したことを書こうと思います!

Seleniumを使ってスクレイピングします!

と言うことで、タイトル通りスクレイピングします。
しかも今回はJupyter Notebookを使ってみました!
以前にJupyter Notebookをインストールしてそのまま放置してたやつですね。。。

ではでは早速Jupyter Notebookを起動してみます。

Jupyter Notebookの起動

以下のコマンドで起動してみる。

$ jupyter notebook

するとブラウザが立ち上がり以下の様な画面が表示される。
これで起動は完了。

f:id:kyamisama:20181201223353p:plain
Jupyter Notebook起動画面

Jupyter Notebookのワークディレクトリの作成

デフォルトで”Untitled Folder”ってフォルダ名がありますが、今回は別途作業フォルダを作成します。
作成方法はとても簡単で下記図の通り、左端の”NEW”と言うタブから”Folder”をクリックする事で新規でフォルダを作成できます。

f:id:kyamisama:20181201223932p:plain
New Create Folder

作成するとこんな感じ↓
”Untitled Folder 1”ってのが新しくできると思います。

f:id:kyamisama:20181201224207p:plain
New Create Folder2

フォルダの名前を変更したければ、ゴミ箱マークの横に”Rename”ってあるのでそこから変更できます。

Seleniumを使ったスクレイピング

作業フォルダも出来たので次に実際にPythonのコマンドを書いていく作業ファイルを準備します。
作業フォルダを作成した方法と同様に”New”→”Python [Root]”をクリックします。

f:id:kyamisama:20181201224717p:plain
New Create Work File

すると新しくブラウザタブが追加されます。基本的にはこの新しく追加されたページで作業を行います。
今回は練習みたいなものなので比較的スクレイピングがやり易いページから情報を取得したいと思います。
よくあるランキングサイトからのスクレイピングをやってみたいと思います。

ランキングサイトからの情報を取得する

今回はスクレイピングさせて頂くWebサイトはこちら
[ランキング] 頂上決戦!一番うまいインスタント袋麺ランキング1位から10位|サッポロ一番,うまかっちゃん,チキンラーメン|他 - gooランキング

インスタントラーメンのランキングサイトから以下の3つの情報を取得してみます。

  • 順位
  • 商品名
  • 投票数

まずは、Seleniumをインポートします。ちなみにこれを動作させるとGoogle Chromeが起動します。

from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://ranking.goo.ne.jp/column/5524/ranking/51628/')

次に、順位のみを取得します。

all_rank = []
elem_rank = browser.find_elements_by_class_name('ranking-number')
for rank in elem_rank:
    elem_rank = rank.text
    all_rank.append(elem_rank)
all_rank

f:id:kyamisama:20181201230422p:plain
Ranking

そして、商品名の取得。

all_name = []
elem_name = browser.find_elements_by_class_name('hdg')
for name in elem_name:
    elem_name = name.text
    all_name.append(elem_name)
all_name

f:id:kyamisama:20181201230526p:plain
Product Name

最後に投票数の取得。

points = browser.find_elements_by_class_name('article-meta')
all_point = []
for _point in points:
    point = _point.text
    all_point.append(point)
all_point

f:id:kyamisama:20181201230817p:plain
Ranking2

これで3つの情報を取得できました。
ただ取得した情報がバラバラだと味気ないのでこの情報を合体させたいと思います。

最後に取得した情報をCSVに纏めて保存

それぞれ取得した情報をPandasを使って綺麗に整理して保存してみます。

import pandas as pd
df = pd.DataFrame()
df['ランキング'] = all_rank
df['商品名'] = all_name
df['投票数'] = all_point
df

f:id:kyamisama:20181201231221p:plain
Export to CSV

以上でSeleniumを使ったスクレイピング終了です!
思ってたより上手にスクレイピング出来たんじゃないかと思います。
実はスクレイピングで取得してみたい情報があるので完成した際にはここでお披露目出来ればと思っています。
またUdemyも素晴らしいWeb教材です。
たまに90%OFFセールをやっているのでその時はお買い得ですので、興味のある方は是非やってみてください。