LoginSignup
1
1

More than 3 years have passed since last update.

スクレイピングでhtmlのテーブルから情報を抜きcsvにする方法

Last updated at Posted at 2019-07-14

この記事では.

旅行などで検索サイトを使わない場合などにwikiやお国のサイトを使うが、
プレーンなhtmlに情報が張り付いているので検索が面倒。

こういうやつ。
https://www.env.go.jp/water/yusui/result/sub4-2/PRE13-4-2.html

ということで、スクレイピングして自分で検索可能なものを作る際にデータを抜き出すときのメモ。
htmlのテーブルならヘッダも含めてループしてcsvにしておく。(今回特殊なヘッダなので手で作ったけど、、)
あと、コードはurl固定だけど、PRE{都道府県コード}の引数を与えれば全都道府県を一回でcsvにすることが可能。
都道府県コードは別ページにあった。

スクレイピングのコード

import requests
from bs4 import BeautifulSoup

import csv
# アクセスするURL
url = 'https://www.env.go.jp/water/yusui/result/sub4-2/PRE13-4-2.html'
# reqest and parse
response = requests.get(url)
response = BeautifulSoup(response.content, 'html.parser')
# テーブル情報を取得
table = response.findAll('table')
rows = response.findAll('tr')
# csvデータ作成
csvFile = open("ebooks2.csv", 'wt', newline = '', encoding = 'utf-8')
writer = csv.writer(csvFile)
# ヘッダーが二重になっていて取り出すのが面倒なのでここは記載してしまう
csvItem = ['回答市区町村名','名称','ふりがな','所在地','概要等','アクセス制限','湧水保全活動','湧水写真・位置図']
writer.writerow(csvItem)
# ここからが1行ごとの処理
for row in rows :
    # 項目ずつlist.append
    csvItem = []
    for cell in row.findAll('td'):
        csvItem.append(cell.text)
    #  ヘッダもこのループ内なので項目がない場合は無視
    if len(csvItem) > 0:
        writer.writerow(csvItem)
csvFile.close()

参考

ほぼほぼ以下をコピペで使ってます.
https://qiita.com/hujuu/items/b0339404b8b0460087f9
誰かが作ったapiサービス
https://springwaterapi.docs.apiary.io/#

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1