見出し画像

退屈なことを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」と書くだけにしたりしてます。課題文の要件が抽象的なのが悪いということでひとつ。

この記事が気に入ったらサポートをしてみませんか?