スクレイピングでテーブルの情報をCSVに出力

Python
fancycrave1 / Pixabay

こんにちは。

やらしみずです。

趣味で書いたコードが会社での作業で約に立ったので、需要ちょっとぐらいあるかなと思ってスクエイピングのテンプレのようなものを公開します。

今回書いたコードは、URLを入力したらそのページに有るtabelタグ中のデータをcsvファイルにしてくれるものです。

実際に書いたコードはもう少し細かい設定などをしているのですが、このくらいライトなコードの方が後々修正しやすいかなぁと思い、こちらには少し簡素にしたバージョンを載せています。

もしtableが複数有るけど、そのうちの何番目を指定したいよとか有りましたら、そこはよしなに。

ちなみに、詳しいことは言えませんが、会社で役にった作業とは、システム内の検索結果をエクセルに貼り付ける作業です笑

依頼された瞬間に「これ、日本アニメの総時間計算したスクリプト使えるやん!!」って感動しましたね。
→その時の記事はこちら

検索結果がCSVファイルとかで出力されるのであればよかったのですが、残念ながらその機能はまだついていないようです、、、

時間があれば勝手に実装します笑

このスクリプトでできること

・入力したURLのテーブル情報をCSVファイルに落とす!!

実行環境

PC:MacBook Air
OS:MacOS Mojave
言語:Python3(2の方も需要があれば作ります)
ライブラリ:urllib3,Beautifulsoup4

環境構築

1.homebrewをインストール(https://brew.sh/index_ja.html)

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

2.Python3をインストール

$ brew install python3

3.pipをインストール(python3をインストール時に入ってたら不要)

$ sudo easy_install pip3

4.urllib3をインストール

$ pip3 install urllib3

5.Beautifulsoup4をインストール

$ pip3 install beautifulsoup4

コード

# coding: UTF-8
import csv
from bs4 import BeautifulSoup
from urllib.request import urlopen

# ファイル名を指定
# file = open('test.html')

# URLで
root_url = "URL"
html = urlopen(root_url)

# html = file.read()
# file.close()

# ビューティフルスープでテーブルの内容をCSV化
soup = BeautifulSoup(html, "html.parser")
tables = soup.findAll("table")

# 保存するファイルの形式
csvFile = open("201903_table.csv", 'wt', encoding = 'utf-8')
writer = csv.writer(csvFile)
for table in tables:
    for rows in table.findAll(['tr']):
        csvRow = []
        for cell in rows.findAll(['td']):
            csvRow.append(cell.get_text())
        writer.writerow(csvRow)
        # コマンドラインに出力
        print(csvRow)
# ファイルを閉じる
csvFile.close()

太文字の「URL」に関しては自身が取りたいデータが入っているURL、「●●.csv」に関しては保存したいファイル名を入力してから「●●●.py」などの名前で保存をしてください。

実行

$ cd <ファイルを保存したディレクトリ>
$ python3 ●●●.py

私はテストとして、ゴルフのランキングを使ったので、一応そのURLも載せておきます笑

QTランキング:https://www.lpga.or.jp/tournament/reranking/2019/qt

上記をURLに入力した状態でコードを実行すると、テーブルに入っている「順位」「名前」の情報がすべて取得されて、CSVファイルに出力されます。

もしテーブルが複数あったりして、情報を絞りたい場合には、for文の中身をよしなにしてください。

最低限のことしか書いてないので、割と修正しやすいと思います。

最後に

仕事で使えてほんとに良かった。いや、まじで。

コメント

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