Python

Python 初心者でも出来るスクレイピングの方法

down angle photography of red clouds and blue sky Python
Photo by eberhard grossgasteiger on Pexels.com

スクレイピングって初心者には、難しそうとお思いの方はいらっしゃいませんか?
実は、そんなこともないんですよ。
そこで、この記事ではPython初心者の方でも簡単に出来るスクレイピングの方法を解説します。
スクレイピングの中でも、もっともよく使用するテーブルデータをWebから取得する方法を解説します。

月見
月見

今回はスクレイピングに関して解説します。
初心者の方でも簡単にできる方法になっていると思います。

スクレイピングとは?

スクレイピングとは、データを抽出することを指します。特にWebページからスクレイピングすることを「Webスクレイピング」と呼びます。この記事では、Webスクレイピングについて解説します。

初心者でも出来るスクレイピングの方法

ソーシャルメディア, メディア, ボード, ネットワー キング, プレゼンテーション, 社会的なメディア

プログラミング言語Pythonを使用することで、以下のライブラリが無料で使用できます。

  • Requests:Webサイトの情報取得や画像の収集を初心者でも簡単にできるツール
  • beatifulsoup4:HTMLやXLMから初心者でも簡単にデータを抽出できるツール

そこで、まずは以下二つのライブラリをインストールしましょう。

インストール方法

windowsの場合は、コマンドラインで、Mac の場合はターミナルで以下のコマンドを実行することで、インストールが可能です。

Requests

pip install requests

beautifulsoup4

pip install beautifulsoup4

データの抽出方法

今回は、もっとも使うであろうWebサイトのテーブルデータの抽出方法を解説します。テーブルデータとは、エクセルのように二次元配列のデータを指します。そこで以下のサイトのテーブル情報をスクレイピングして解説します。

月見
月見

競馬の出馬表をWebスクレイピングするよ!

東京スポーツ杯2歳S(G3) 出馬表 | 2020年11月23日 東京11R レース情報(JRA) - netkeiba
2020年11月23日 東京11R 東京スポーツ杯2歳S(G3)の出馬表です。JRA開催レースの出馬表や最新オッズ、レース結果速報、払戻情報をはじめ、競馬予想やデータ分析など予想に役立つ情報も満載です。
参照元:https://race.netkeiba.com/race/shutuba.html?race_id=202005050711&rf=top_pickup

import requerts from bs4 import BeautifulSoup 二つのライブラリをインストールします。
url = requests.get(urlName)soup = BeautifulSoup(url.content, "html.parser")にキャストして、html.parserを取得します。

import requests
from bs4 import BeautifulSoup

urlName = "https://business.nikkei.com"
url = requests.get(urlName)
soup = BeautifulSoup(url.content, "html.parser")

以下は、出力結果です。soupの中身を確認し、tableクラスを抽出します。これはホームページを構成する部品です。これらの部品たちから、tableのみを抽出します。

tableクラスとは、webサイトでいうとこの表を指します。

なのでこの中身を抽出します。
確認すると、<tr>で改行、<td>でセルの区切りを表現していますね。

そこで、以下のように記述することで、tableタグ以下を<tr>で改行、<td>でセルの区切ります。replace("\n","")で\nの改行の文字を削除します。これがないと、\nが残り視認性が悪くなります。

def table(soup):
    # セレクタ(タグ:table、クラス:test)
    table = soup.find("table")
    trs = table.findAll("tr")
    data_files = []
    for tr in trs:
        data = []
        # 1行ごとにtd, tr要素のデータを取得してCSVに書き込み
        for cell in tr.findAll(['td', 'th']):
            data.append(cell.get_text().replace("\n",""))
        data_files.append(data)
    return data_files

find_allとfindの使い分けは以下です。

タイプすべての要素をリストで返すひとつだけ要素を返す引数(検索条件の指定)
find系find_all()find()要素名, 属性指定(キーワード引数)
find,selectの使い分け

そしてそれをpandasのデータフレームに変換します。

import pandas as pd
df = pd.DataFrame(table(soup))
print(df)

印の列は、Webサイトのでユーザ入力を引数として当てはめるので、以下では、エラーとなっています。

スクレイピングをもっと学びたい

スクレイピングはまだまだ奥が深いです。もっと使いこなしてみたいという初心者のには、こちらの本をおすすめしています。プログラミング初心者の方にもわかりやすく説明されています。本書は簡単なサンプルを作りながら、会話形式でスクレイピングのしくみをまなぶ書籍です。

https://amzn.to/2UTXpKO
[書籍とのゆうメール同梱不可]/Python 2年生スクレイピングのしくみ 体験してわかる!会話でまなべる![本/雑誌] (2年生) / 森巧尚/著

コメント

  1. […] Python 初心者でも出来るスクレイピングの方法スクレイピングって初心者には、難しそうとお思いの方はいらっしゃいませんか?実は、そんなこともないんですよ。そこで、この記事では […]

  2. […] Python 初心者でも出来るスクレイピングの方法スクレイピングって初心者には、難しそうとお思いの方はいらっしゃいませんか?実は、そんなこともないんですよ。そこで、この記事では […]

  3. […] Python 初心者でも出来るスクレイピングの方法スクレイピングって初心者には、難しそうとお思いの方はいらっしゃいませんか?実は、そんなこともないんですよ。そこで、この記事では […]

タイトルとURLをコピーしました