[toc]
前回の記事の続きとなっています。
スクレイピングの流れ
- 自分の欲しい情報がどこに書かれているのか確認する
- pythonで対象個所を指定し、情報を抽出する
大まかな流れはこのようになっています。
スクレイピングをするにあたって、はじめからゴリゴリとpythonのコードを書くわけではありません。前回は環境を準備しました。これで、pythonでスクレピングに使う武器は揃えることができました。
しかし、スクレイピングしたい対象のページのことを知らなければ、揃えた武器をどのように使うかわからないままです。
よって、今回は「対象のページを知る」とは
- どういうことなのか
- どのようにするのか
- どのように使うのか
を説明していきます。
対象のページを知る
対象のページを知るとはつまりHTMLを見るということになります。WEBページはほとんどがHTMLという言語で書かれています。詳しく知りたい方は、HTMLで検索してください。HTMLで直接書いていなかったとしても、HTMLが裏で実行されています。「f12」または「右クリック→検証」を押すと、右側に出てきたコードがHTMLです。
なぜこのような話をしているかというと、pythonに向かって、「ページの○行目の情報を取ってきてほしい」といっても理解できません。よって、pythonにもわかるような形式で場所を指定する必要があるからです。
実際に使ってみる
簡単な例として、 前回の記事 の見出しをすべて取ってきたいとします。
まずすることは、「見出しを取ってきてほしい」ということをpythonにどのように伝えるかです。
見出しの1個目の「対象」というところにマウスを当てて、先ほどの 「右クリック→検証」 をしてみます。そのようにすると、
<h2>
<span class="ez-toc-section" id="i">
<strong>対象</strong>
</span>
</h2>
このようなコードが出てきます。このコードからわかる通り、入れ子の構造になっています(h2>span>strong>「対象」)。ほかの見出しも見ていくと、全てこの構造になっているため、パターンを理解することができました。
スクレイピングでは、欲しい情報がどのようなパターンで入っているかを探し出して、情報を抽出していくことで、自動化することができます。
これがわかれば、あとは、このタグを指定してあげることで見出しを取ってくることができます。
プログラム
1.必要なパッケージをインポート
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import html
2.Google Chrome起動→目的のURLに移動
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://blog.deepblue-ts.co.jp/2019/08/16/scraping/")
3-1.見出し「対象」を抽出
#場所を指定
head = driver.find_element_by_css_selector("h2 > span > strong")
#中身を取り出す
print(head.text)
#出力
対象
3-2.見出しのすべてを抽出
find_elements_by_css_selectorにすることで、すべてを抽出することができます。返り値がリスト型なので、for文で順番に中身を取り出します。
#場所を指定
head = driver.find_elements_by_css_selector("h2 > span > strong")
#中身を取り出す
heads = []
for text in head:
heads.append(text.text)
print(heads)
#出力
['対象', '基本事項', '環境構築']
今回紹介したことでスクレイピングのスタートラインには立てたと思います。ここからは自分で調べて使っていくことでだいたいのページはスクレイピングできると思います。