KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
【サンプルコード付】実例をもとにPythonを使ってスクレイピング実践

【サンプルコード付】実例をもとにPythonを使ってスクレイピング実践

Pythonを活用してスクレイピングを実践したいけれど、何から始めていいのかわからない。悩んでいる方も多いのではないでしょうか?今回は実例をもとにPythonを使ってスクレイピングを行います。是非最後までご一読いただけますと幸いです。

目次
  1. 用意するもの
  2. アーキテクチャ
  3. スクレイピングを行う上での注意点
  4. 実装手順
    1. 私が用意したファイルのダウンロード
    2. Pythonを実行してみる
  5. 完成動画
  6. よくわかるコード解説
    1. resUrl関数
    2. convertData関数
  7. まとめ
  8. こんなことにもチャレンジしてみよう
  9. 参考文献
目次を開く⬇︎

用意するもの

  • ローカルにてPython環境が叩ける状態であること(ターミナルにてpython -Vでバージョンが表示されていること)
  • pipが入っていない場合はpipを入れておく(Python 3.4以降では標準で入っている。参考)
  • コードを編集する、個人に合うエディタが使える状態であること(おすすめはVsCode)

アーキテクチャ

今回採用するアーキテクチャの流れを説明すると、

  1. PCからPythonコードを実行する。
  2. PythonコードからこちらのWebページへアクセスする。
  3. アクセス先のデータを取得する。
  4. 取得したデータを整形する。
  5. 整形したデータをExcel形式(拡張子xlsx)にまとめる。

を行います。

スクレイピングを行う上での注意点

スクレイピングを実施することで、業務効率化や自動化が可能になります。ただ使い方を間違えてしまうと、違法になってしまいます。以下のことを留意した上で、スクレイピングに取り組んでください。

  • スクレイピングを使って得た情報から、著作権を侵害するようなコンテンツを作成しない。
  • サイト運営者側が定める利用規約に違反しない。
  • 過剰にサイトへアクセスして、サービス運営を阻害する行為をしない。(DOS攻撃とは?)

スクレイピングにまつわる法律上の問題点

実装手順

実装順序としては、

  1. 私が用意したファイルのダウンロード
  2. Pythonを実行してみる

で行います。丁寧に解説致しますので、最後までご確認ください。

私が用意したファイルのダウンロード

私が用意したファイルのダウンロードの章では、ファイルをダウンロードしてPython実行するための下準備を行います。早速ですが、実際に手を動かしてみましょう。

  1. こちらのページに訪問ください。
  2. 緑の「Code」と書かれているボタンをクリックして、 「Download ZIP」をクリックください。
  3. ダウンロードしたZipファイルをドラック&ドロップを使って、デスクトップへ移動して下さい。
  4. Zipファイルを展開するために、デスクトップに置いた先ほどのファイルをダブルクリックして下さい。
  5. 展開すると、scraping1-masterフォルダが生成されます。

Pythonを実行してみる

Pythonを実行してみるの章では、pipを使ってプログラムを動かすために必要なパッケージ(Pythonを実行する際に汎用的に使われるコード群)をインストールして、Pythonを実行します。

  1. ターミナルを開いて、scraping1-masterのディレクトリへ移動します。(cdを利用する。)
  2. ターミナル上でpip install -r requirements.txt と入力する。(scraping1-masterディレクトリ内にrequirements.txtファイルを用意していて、Pythonファイルを実行するために必要なパッケージ情報を記載しています。その情報を元に自身のパソコン内へパッケージを格納しています。)
  3. 最後にpython main.pyを実行します。すると、こちらのWebページへアクセスして、スクレイピング結果をshopInfo.xlsxファイルへ格納します。

完成動画

※ 動画中に登場するrm -rfコマンドは、Pythonファイルを実行してshopInfo.xlsxファイルが生成されることを確認するために利用しています。ファイルを一斉削除することができる危険なコマンドですので、利用する場合は取扱いにご注意ください。

よくわかるコード解説

実装はできたけれども、コードについて理解できていないと思います。確認していきましょう。

resUrl関数

  • html = requests.get(URL).text : requestsライブラリを活用してURLへアクセスし、結果を取得してhtmlへ代入します。結果の中には様々な属性のデータが入っていて、今回はtext属性のデータのみを利用したいため、.textとしました。(requestsの属性についての詳細)
  • BeautifulSoup(html, "html.parser") : レスポンスのhtmlからBeautifulSoupオブジェクトを作ります。BeautifulSoupオブジェクトを作ることで、データ整形が簡易になります。
1# URL情報からHTMLデータを取得する。
2def resUrl():
3    # URLへリクエストして、WebページのHTML情報を取得する。
4    # 参考 : https://note.nkmk.me/python-requests-usage/
5    html = requests.get(URL).text
6    # レスポンスの HTML から BeautifulSoupオブジェクトを作る
7    # 参考 : https://qiita.com/Chanmoro/items/db51658b073acddea4ac
8    return BeautifulSoup(html, "html.parser")

convertData関数

  • res.find("h1").text : BeautifulSoupオブジェクトを作ったことで、便利な関数が利用可能になりました。find("h1")関数は、HTML要素のh1タグが最初に登場する箇所を取得する関数です。.textとすることで、h1タグ内に表示されるテキスト情報を取得しています。
  • res.find_all("h3") : find_all("h3")関数は、HTML要素のh3タグが利用される箇所を全て取得する関数です。
  • res.find_all("div", ["items"]) : find_all("div", ["items"])関数は、HTML要素のdivタグにclassとしてitemsが付与されている箇所を全て取得する関数です。
1# 取得したHTMLデータを整形する。
2# ws : Excelファイルを表すインスタンス
3# res : HTMLデータ
4def convertData(ws, res):
5    # 一番初めに登場するh1タグのテキストを取得する。
6    shopTitle = res.find("h1").text
7    # h3タグ一覧を全て取得する。
8    shopList = res.find_all("h3")
9    # addressタグ一覧を全て取得する。
10    addressList = res.find_all("address")
11    # divタグでクラス属性がitemsのタグを全て取得する。
12    itemList = res.find_all("div", ["items"])
13    writeData(shopTitle, shopList, addressList, itemList)

HTMLタグを調べる方法は、こちらのYoutube動画でご確認ください。

動画内で表示されるHTMLタグを確認するツールの表示方法は、Mac(Command + Option + i), Windows(F12)になります。(参考)

まとめ

  • requestsを使うことで簡単にデータを取得できる。
  • Beautiful Soupを活用することで、データ整形が容易になる。

こんなことにもチャレンジしてみよう

  • 自分の好きなサイトや毎日閲覧するページのHTML情報を取得してみよう。
  • その他のHTMLタグについてもデータ整形してみよう。
  • Beautiful Soupで利用できる、その他の便利関数を利用してみよう。(参考)

参考文献