【キノカレッジ|業務効率化クラス|22年11月(2)】Pythonでスクレイピングをしよう

■ 本講座を受講してできるようになること
・web上にある大量情報をスクレイピングで自動収集することができます
・BeautifulSoupを使った、html解析をできるようになります
・Seleniumを使った、自動ログインやファイルのアップロードができるようになります
・自動化の考え方が身につき、自身で応用したコンテンツを作りDX人材の素養を身につけることができます

■ 課題のテーマ
第1回目:スクレイピング/ブラウザ操作 前編

  • スクレイピングの基礎を理解できるようになる
  • BeautifulSoupの使い方がわかる
  • 自分でカスタマイズしてweb情報を収集できるようになる
  • データの書き出すことができる(エクセルやCSVの形式にしてアウトプットを行う)

第2回目:スクレイピング/ブラウザ操作 後編

  • スクレイピングでweb上画像を収集できるようになる
  • seleniumを使って自動でログインやファイルのダウンロード及び投稿ができるようになる
  • 自身でカスタマイズしたweb操作の自動化ができる

■ 課題の概要・背景

あなたは、キノコード株式会社の業務効率化担当です。
企画部からweb情報を収集したいと相談を受けています。

競合他社の情報を収集し自社商品やサービスの開発や改善につなげるために必要な業務です。
しかし、100や1000を超えるような大量なデータを収集することは非常に骨が折れます。
目でサイトの項目をチェックし、手で収集するとなると同じ作業を繰り返し。
そのような仕事や作業は自動化できることです。
pythonを使って大量のデータを効率よく収集することができます。

大量データを収集する方法は
『webAPIの活用』『スクレイピング』があげられます。

今回はスクレイピングでデータの収集に取り組みます。
サイトにアクセスをして自分の必要な項目を抽出します。

今回の課題に取り組む時にはこちらのキノコードサイトを参考に学習を進めましょう

注釈

今回用いるライブラリのseleniumでキノコードのブログから書き方が変わったものがあります。
browser.find_element_by_id('')のメソッドが使えない場合があります
browser.find_element(By.ID,'')の書き方へ変更をお願いします
他も同様でby_nameはBy.NAME, by_xpathはBy.XPATHへ変更が必要です

■ 成果物

■ 問1 web画像をダウロードしよう

  1. requestsモジュールをインポートしましょう。
  2. requestsのgetメソッドでデモサイトのサイト情報を取得するコードを書きましょう。変数名rとします。
  3. r.status_codeでレスポンスを確認しましょう
  4. textメソッド使い初めから500文字抽出しましょう
  5. BeautifulSoupをインストールしましょう
  6. 変数rのhtmlを解析します。BeautifulSoupの引数にr.textとhtml.parserを与え、変数名soupに格納しましょう
  7. 変数soupをfind_allメソッドで引数にimgを渡し、取得したデータを変数get_image_infoに代入しましょう
  8. get_image_info[0]にattrsメソッドで引数にsrcを渡し画像が保存されているリンク先src属性を取得しましょう
  9. get_image_info[0].split('/')[-1]のコードを実行しファイル名が取得されているか確認しましょう
  10. 変数get_image_infoのimgリンクをリスト化します。問8をヒントにfor文を使いget_image_infoのimgタグのリンクを抽出し、変数名images_listに格納しましょう
  11. osライブラリをインポートしましょう
  12. mkdirメソッドを使用し、画像ファイルを保存するディレクトリを作成しましょう
  13. 画像を保存します。これまでの問と参考に以下の手順でコードを記述しましょう
    1. images_listをfor文で回して、画像が保存されているURLをimage_dateに格納します
    2. 画像が保存されているページの情報を、requestsのgetメソッドで取得します
    3. open関数で引数に各URLのファイル名を保存ファイル名とし、書き込みで、作成した画像ファイルを保存するディレクトリに保存しましょう
    4. closeでファイルを閉じましょう

■ 問2 seleniumを使って自動ログインをしよう

  1. seleniumをインポートしているか確認しましょう。まだインストールできていない方は!pip install seleniumしましょう
  2. googleのChromeDriverのディレクトリを確認しましょう。今回初めての方はブログを参考にダウンロードしましょう
  3. selinumライブラリのwebdriverモジュール,time,pandasの3つをインストールしましょう
  4. from selenium.webdriver.common.by import Byを記述しましょう
  5. ログインするサイトのIDやUSER名,パスワードを変数に格納します。USER = 'test_user'
    PASS = 'test_pw'のコードを書きましょう
  6. Chromeを自動で操作する記述します。「browser」という変数を書いて、イコールを書きます。次に、「webdriver」を書いて、ドットを書きます。つづいて、Chromeを書いて、丸括弧を書きましょう。環境によってChromeDriverをダウンロードしたパスとexeファイルを記述しましょう
  7. driverのgetメソッドでデモサイトにアクセスしましょう
  8. ログイン画面に定義したUSERとPASSの値を入力する操作を記述します
    1. 「element」という変数を書いて、イコールを書きます。次に、browser.find_element(By.ID,"swpm_user_name")を書きましょう
    2. element.clear()を記述します。これはswpm_user_nameの要素を削除する意味です
    3. element.send_keys(USER)と記述します。これはswpm_user_nameの要素にUSERを入力する記述です
    4. 問8-1から8-3のコードをコピーして貼り付けます。コピー先のswpm_user_nameはswpm_passwordへ、USERはPASSへ置換しましょう
    5. print("フォームを入力完了")とコードを書きましょう
  9. ボタンをクリックする操作を記述します
    1. 「browser_form」という変数を書いて、イコールを書きます。次に、browser.find_element(By.NAME,'swpm-login')を書きましょう
    2. time.sleep(3)を記述します。3秒間待つというコードです
    3. browser_from.click()を記述しましょう。ログインして次の画面に変移していれば成功です
  10. time.sleep(2)とbrowser.quit()を記述しましょう。2秒間待機とブラウザを閉じるコードです
  11. print("実行完了です")とコードを書きましょう
  12. 1から11までのコードを全て一つのセルに(可能であればpyファイルに挑戦)して自動処理が実行できるか確認しましょう

■ 問3 自動ログインをし、情報を取得しよう

  1. この問いはチャレンジ問題です。前回と今回で学習したことを用い、ご自身でコードを考え、自動化を実現してみてください。以下が問いの内容です
    1. まず、デモサイトへ値を入力しログインをし、You Tube リンクをクリックして次のページへ移動します
    2. そのページ内にあるyoutubeのurlを取得し、csvファイルで出力する(クリックする要素はBy.XPATHの値を設定すると可能です)
    3. 全てワンクリックで行えるコードを書いてください