こんにちは。
今週は「アルフレッド・アドラー 人生に革命が起きる100の言葉」を読みました。その中で突き刺さった言葉があったので、自分のブログだし(笑)残しておこうと思います。
「やる気がなくなった」のではない。
「やる気をなくす」という決断を自分でしただけだ。
「変われない」のではない。
「変わらない」という決断を自分でしているだけだ。引用:アルフレッド・アドラー 人生に革命が起きる100の言葉 著:小倉 広
って感じでしたが、とても晴れやかなスッキリした気分になりました。すごく読みやすいので大変お勧めです。
さて、余談が長くなりましたが、今週はコンピュータビジョン理論の勉強が出来なくて、軽めのスクレイピングのプログラムをご紹介しようと思います。今やデータ集めに欠かせない重要なものですが、これ自体はあまり知識が増えた感じがしないので、あまり好きではないんですけど、でもうまくいった時は、プログラミングしていて良かったな、と思える、なんだか不思議な。(やっぱり今日変だな・・・)
ログインが必要なWebサイトのスクレイピング概要
Seleniumというブラウザを自動で操作することがツールを利用してログインした後に欲しい画像のURLからダウンロードします。また、Seleniumは市場で主要なブラウザの全てをWebDriverを使うことでサポートしています。WebDriverとはAPI群とプロトコルです。
私はChromeユーザですので、以下から取得します。最近Chromeのバージョンが上がって、それに合わせてWebDriverも更新する必要がありました。
https://chromedriver.chromium.org/downloads
FireFox等別のブラウザをお使いの方は、以下サイトが参考になると思います。
https://www.selenium.dev/documentation/ja/getting_started_with_webdriver/browsers/
ソースコード
from selenium import webdriver import time # ブラウザを表示しないで起動 options = webdriver.ChromeOptions() options.set_headless(True) options.add_experimental_option("prefs", { "download.default_directory": r"C:\Users\mami\XXXXX\XXXXX", "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True }) driver = webdriver.Chrome(executable_path="C:\XXXXX\chromedriver.exe", chrome_options=options) # ログイン用URL driver.get('https://XXXXX') time.sleep(1) # ログイン(サイトによって変わる) driver.find_element_by_name('login').send_keys('XXXXX') driver.find_element_by_name('password').send_keys('XXXXX') driver.find_element_by_name('loginbtn').click() time.sleep(5) # 画像取得 imgurl = "https://XXXXX.jpg" driver.get(imgurl) filename = "data.jpg" # ダウンロード実行用スクリプトを生成&実行 script_str = """ window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(), a = document.createElement('a'), file; xhr.open('GET', '""" + imgurl + """', true); xhr.responseType = 'blob'; xhr.onload = function () { file = new Blob([xhr.response], { type : 'application/octet-stream' }); a.href = window.URL.createObjectURL(file); a.download = '""" + filename + """'; a.click(); }; xhr.send(); """ driver.execute_script(script_str) time.sleep(1)
コメント