Created
November 22, 2020 21:39
-
-
Save shinyaoguri/40471f666ed9c021e4539aa8e98f593d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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