Skip to content

Instantly share code, notes, and snippets.

@shinyaoguri
Created November 22, 2020 21:39
Show Gist options
  • Save shinyaoguri/40471f666ed9c021e4539aa8e98f593d to your computer and use it in GitHub Desktop.
Save shinyaoguri/40471f666ed9c021e4539aa8e98f593d to your computer and use it in GitHub Desktop.
# encoding: utf-8
# https://kunishitei.bunka.go.jp/bsys/bemaindetails.asp?register_id=101&item_id=00002498
import os
import csv
import time
import urllib.error
import urllib.request
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
from bs4 import BeautifulSoup
BUNKAZAI_LIST_FILE_PATH = '愛知登録文化財建物.csv'
BASE_URL = 'https://kunishitei.bunka.go.jp/heritage/detail/101/'
def main():
# ブラウザーを起動
options = Options()
options.binary_location = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=options)
with open(BUNKAZAI_LIST_FILE_PATH) as f:
reader = csv.reader(f)
# ID
print('"管理対象ID", ', end="")
# 名称
print('"名称", ', end="")
# ふりがな
print('"ふりがな", ', end="")
# トップ画像
print('"トップ画像", ', end="")
# 員数
print('"員数", ', end="")
# 種別1
print('"種別1", ', end="")
# 種別2
print('"種別2", ', end="")
# 時代
print('"時代", ', end="")
# 年代
print('"年代", ', end="")
# 西暦
print('"西暦", ', end="")
# 構造及び形式等
print('"構造及び形式等", ', end="")
# その他参考となるべき事項
print('"その他参考となるべき事項", ', end="")
# 登録番号
print('"登録番号", ', end="")
# 登録回
print('"登録回", ', end="")
# 登録告示年月日
print('"登録告示年月日", ', end="")
# 登録年月日
print('"登録年月日", ', end="")
# 追加年月日
print('"追加年月日", ', end="")
# 登録基準1
print('"登録基準1", ', end="")
# 登録基準2
print('"登録基準2", ', end="")
# 所在都道府県
print('"所在都道府県", ', end="")
# 所在地
print('"所在地", ', end="")
# 保管施設の名称
print('"保管施設の名称", ', end="")
# 所有者名
print('"所有者名", ', end="")
# 所有者種別
print('"所有者種別", ', end="")
# 管理団体・管理責任者名
print('"管理団体・管理責任者名", ', end="")
# 解説文
print('"解説文"')
for index, row in enumerate(reader):
if index != 0:
if not os.path.exists(os.path.join('pages', str(row[1])+'.html')):
# Google検索画面にアクセス
# time.sleep(1)
driver.get(BASE_URL + str(row[1]))
# htmlを取得・表示
html = driver.page_source
soup = BeautifulSoup(html, "html5lib")
# 管理対象ID
print('"' + str(row[1]) + '", ', end="")
tmp_left = soup.find(id="heritage_detail_left")
# 名称
print('"' + tmp_left.findAll('tr')[0].findAll('td')[2].string.strip() + '", ', end="")
# ふりがな
print('"' + tmp_left.findAll('tr')[1].findAll('td')[2].string.strip() + '", ', end="")
# トップ画像
print('"' + tmp_left.findAll('tr')[2].find('img')['src'] + '", ', end="")
# 員数
print('"' + tmp_left.findAll('tr')[3].findAll('td')[2].string.strip() + '", ', end="")
# 種別1
print('"' + tmp_left.findAll('tr')[4].findAll('td')[2].string.strip() + '", ', end="")
# 種別2
print('"' + tmp_left.findAll('tr')[5].findAll('td')[2].string.strip() + '", ', end="")
# 時代
print('"' + tmp_left.findAll('tr')[6].findAll('td')[2].string.strip() + '", ', end="")
# 年代
print('"' + tmp_left.findAll('tr')[7].findAll('td')[2].string.strip() + '", ', end="")
# 西暦
print('"' + tmp_left.findAll('tr')[8].findAll('td')[2].string.strip() + '", ', end="")
# 構造及び形式等
print('"' + tmp_left.findAll('tr')[9].findAll('td')[2].string.strip() + '", ', end="")
# その他参考となるべき事項
print('"' + tmp_left.findAll('tr')[10].findAll('td')[2].string.strip() + '", ', end="")
# 登録番号
print('"' + tmp_left.findAll('tr')[11].findAll('td')[2].string.strip() + '", ', end="")
# 登録回
print('"' + tmp_left.findAll('tr')[12].findAll('td')[2].string.strip() + '", ', end="")
# 登録告示年月日
print('"' + tmp_left.findAll('tr')[13].findAll('td')[2].string.strip() + '", ', end="")
# 登録年月日
print('"' + tmp_left.findAll('tr')[14].findAll('td')[2].string.strip() + '", ', end="")
# 追加年月日
print('"' + tmp_left.findAll('tr')[15].findAll('td')[2].string.strip() + '", ', end="")
# 登録基準1
print('"' + tmp_left.findAll('tr')[16].findAll('td')[2].string.strip() + '", ', end="")
# 登録基準2
print('"' + tmp_left.findAll('tr')[17].findAll('td')[2].string.strip() + '", ', end="")
# 所在都道府県
print('"' + tmp_left.findAll('tr')[18].findAll('td')[2].string.strip() + '", ', end="")
# 所在地
print('"' + tmp_left.findAll('tr')[19].findAll('td')[2].string.strip() + '", ', end="")
# 保管施設の名称
print('"' + tmp_left.findAll('tr')[20].findAll('td')[2].string.strip() + '", ', end="")
# 所有者名
print('"' + tmp_left.findAll('tr')[21].findAll('td')[2].string.strip() + '", ', end="")
# 所有者種別
print('"' + tmp_left.findAll('tr')[22].findAll('td')[2].string.strip() + '", ', end="")
# 管理団体・管理責任者名
print('"' + tmp_left.findAll('tr')[23].findAll('td')[2].string.strip() + '", ', end="")
# 解説文
print('"' + soup.findAll("table")[5].findAll('td')[1].string.strip() + '"')
# 画像のダウンロード
try:
with urllib.request.urlopen(tmp_left.findAll('tr')[2].find('img')['src']) as web_img:
data = web_img.read()
os.makedirs("img", exist_ok=True)
with open(os.path.join('img', str(row[1]))+".jpg", mode='wb') as local_file:
local_file.write(data)
except urllib.error.URLError as e:
print(e)
else:
print('既に存在')
# ブラウザーを終了
driver.quit()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment