HTML
 Computer >> コンピューター >  >> プログラミング >> HTML

PythonでHTMLテーブルのデータをCSVファイルに保存する方法【BeautifulSoup活用】


課題:データ収集の難しさ

データサイエンティストにとって最も苦労する作業のひとつが、データの収集です。ウェブ上には実際ところ豊富なデータが存在していますが、問題はそれをどう自動的に抽出・取得するかという点にあります。

はじめに

本記事では、tutorialspointのPythonチュートリアルページに埋め込まれているHTMLテーブル内のデータ(基本演算子の一覧など)を抽出し、CSVファイルとして保存する方法を解説します。

もしテーブルが1つだけなら、コピー&ペーストでCSVファイルに貼り付けることも可能です。しかしながら、1つのページに5つ以上のテーブルが存在する場合、手作業での対応は非常に手間がかかり非効率です。そこで役立つのがPythonによる自動化です。

方法1:CSVファイルを簡単に作成する

まず、Pythonの標準ライブラリ csv を使った、CSVファイル作成の基本をおさえておきましょう。

import csv

# 書き込みモードでファイルを開く(存在しない場合は新規作成される)
File = open('test.csv', 'w+')
Data = csv.writer(File)

# ヘッダー行の書き込み
Data.writerow(('Column1', 'Column2', 'Column3'))

# データの書き込み
for i in range(20):
    Data.writerow((i, i+1, i+2))

# ファイルを閉じる
File.close()

出力結果

上記のコードを実行すると、スクリプトと同じディレクトリ内に test.csv ファイルが生成されます。

PythonでHTMLテーブルのデータをCSVファイルに保存する方法【BeautifulSoup活用】

方法2:HTMLテーブルを取得してCSVに書き出す

次に、Webページ上のHTMLテーブルを取得し、CSVファイルとして書き出す手順を見ていきましょう。

ステップ1:必要なモジュールをインポートする

まずはインポート文を記述します。BeautifulSoup は事前に pip install beautifulsoup4 でインストールしておく必要があります。

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://www.tutorialspoint.com/python/python_dictionary.htm'

ステップ2:HTMLを取得してパースする

urlopen を使ってURLを開き、その内容を html オブジェクトに格納します。続いて、BeautifulSoupでHTMLを解析します。

html = urlopen(url)
soup = BeautifulSoup(html, 'html.parser')

ステップ3:テーブルを抽出する

HTML内のテーブルを検索してデータを取り出します。ここではデモンストレーションとして、最初のテーブル [0] のみを抽出します。

table = soup.find_all('table')[0]
rows = table.find_all('tr')

ステップ4:抽出結果を確認する

print(rows)

出力例:

[<tr>
<th style='text-align:center;width:5%'>Sr.No.</th>
<th style='text-align:center;width:95%'>Function with Description</th>
</tr>, 
<tr>
<td class='ts'>1</td>
<td><a href='/python/dictionary_cmp.htm'>cmp(dict1, dict2)</a>
<p>Compares elements of both dict.</p></td>
</tr>, <tr>
<td class='ts'>2</td>
<td><a href='/python/dictionary_len.htm'>len(dict)</a>
<p>Gives the total length of the dictionary.</p></td>
</tr>, 
<tr>
<td class='ts'>3</td>
<td><a href='/python/dictionary_str.htm'>str(dict)</a>
<p>Produces a printable string representation of a dictionary</p></td>
</tr>, 
<tr>
<td class='ts'>4</td>
<td><a href='/python/dictionary_type.htm'>type(variable)</a>
<p>Returns the type of the passed variable.</p></td>
</tr>]

ステップ5:CSVファイルに書き込む

取得した行データを1行ずつ処理し、セル内のテキストのみを抽出してCSVファイルに書き込みます。

File = open('my_html_data_to_csv.csv', 'wt+')
Data = csv.writer(File)
try:
    for row in rows:
        FilteredRow = []
        for cell in row.find_all(['td', 'th']):
            FilteredRow.append(cell.get_text())
        Data.writerow(FilteredRow)
finally:
    File.close()

ステップ6:結果を確認する

これで、抽出したデータが my_html_data_to_csv.csv ファイルに保存されました。

完全なコード例

ここまでに説明した内容をすべてまとめたコードが以下になります。

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

# URLを設定
url = 'https://www.tutorialspoint.com/python/python_basic_syntax.htm'

# URLを開いてHTMLを解析
html = urlopen(url)
soup = BeautifulSoup(html, 'html.parser')

# 最初のテーブルを抽出
table = soup.find_all('table')[0]
rows = table.find_all('tr')

# 内容をファイルに書き込む
File = open('my_html_data_to_csv.csv', 'wt+')
Data = csv.writer(File)
try:
    for row in rows:
        FilteredRow = []
        for cell in row.find_all(['td', 'th']):
            FilteredRow.append(cell.get_text())
        Data.writerow(FilteredRow)
finally:
    File.close()

HTMLページ上のテーブル

PythonでHTMLテーブルのデータをCSVファイルに保存する方法【BeautifulSoup活用】

まとめ

このように、Pythonの BeautifulSoupcsv モジュールを組み合わせれば、Webページ上のHTMLテーブルデータを簡単にCSVファイルへ変換できます。手作業によるコピー&ペーストから解放され、複数のテーブルが含まれるページでも効率的にデータ収集が可能になります。スクレイピングを行う際は、対象サイトの利用規約やrobots.txtを確認し、マナーを守って実行することを忘れないようにしましょう。

  1. テキスト(TXT・CSV)ファイルをExcelファイルに変換する方法

    メモ帳などで作成したテキストファイルに商品リストなどのデータがあり、それをMicrosoft Excelに取り込みたいという場面はよくあります。実は、Excelにはテキストファイル(.txt や .csv)の内容をそのままスプレッドシートに読み込む機能が標準で搭載されており、手入力の手間を大幅に省くことができます。 たとえば、Notepad(メモ帳)や.txtファイルに保存された商品リストを、Excelの1つの列として読み込みたいとします。これを実現する方法は主に2つあります。1つ目は、テキストファイルからすべての文字列を手動でコピー&ペーストする方法。2つ目は、Excelに組み込まれたインポ

  2. Excelファイルをカンマ区切りのCSV形式で保存する3つの確実な方法

    CSV(Comma-Separated Values:カンマ区切り値)ファイルは、値をカンマで区切ったテキストファイルです。データ分析のさまざまな場面で活躍する便利な形式ですが、用途によってはExcelファイルをCSVファイルとして保存し直す必要が生じることもあります。本記事では、Excelファイルをカンマ区切りのCSVとして保存するための、実用的な3つの方法を詳しく解説します。 練習用に、以下からワークブックをダウンロードできます。 CSVとは? CSVとは「Comma-Separated Values(カンマ区切り値)」の略で、各値をテキスト文字列として保存し、値同士をカンマで区切る一般的