退屈なことをPythonにやってもらうための演習の回答[11.10.4]
毎度、『退屈なことはPythonにやらせよう』についている演習プロジェクトの自分なりの回答を投げています。
これでひとまず11章が終わりです。いま、12章以降をやろうか悩んでいます。
というのも、やはりExcelよりはGoogleスプレッドシートの方が使い勝手がよく、Googleスプレッドシートの操作になると、GoogleAppsScriptという、JavaScriptの言語になるからです。
#! python3
# 11.10.4 リンクの検査
import os, sys, time, requests
from selenium import webdriver
from logging import basicConfig, getLogger, DEBUG, INFO
logger = getLogger(__name__)
basicConfig(level=INFO)
# HTMLを保存するディレクトリ名
dir_name = '11-10-4'
# 第1引数を代入(エラーは強制終了)
try:
from_url = sys.argv[1]
except IndexError:
print('Please input URL.')
sys.exit(1)
# URLを指定
browser = webdriver.Firefox()
browser.get(from_url)
# リンクをGET
elem_list = browser.find_elements_by_tag_name('a')
# ファイル保存のためのディレクトリを作成
os.makedirs( dir_name, exist_ok=True)
# GETしたリンクの検査
for i, url in enumerate(elem_list) :
access_url = url.get_attribute('href')
# リンクを検査
try:
# リンクが行きている場合、リンク先のDL
res = requests.get(access_url)
res.raise_for_status()
logger.info('ok {}'.format(access_url))
file_name = os.path.join( dir_name , str(i)+'.html' )
# ファイル保存
html_file = open( file_name,'wb')
for chunk in res.iter_content(100000):
html_file.write(chunk)
html_file.close()
except:
# リンクが死んでいたらNGと表示
print('ng {}'.format(access_url))
continue
browser.quit()
かなり適当な実装というか…
ダウンロードする名前を連番にしたり、チェックを入れるという話は「NG」と書くだけにしたりしてます。課題文の要件が抽象的なのが悪いということでひとつ。
この記事が気に入ったらサポートをしてみませんか?