Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

この記事では.

旅行などで検索サイトを使わない場合などに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/#

binary2
東京勤務の5年目のエンジニア. 学歴は,理学修士(専攻は物理,実験屋). FileMakerでコンサルから開発まで(3年間)→フロント開発Vue使い(1年間)→ひよっこデータ分析官
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away