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

スクレイピングで大量情報を収集しよう
webブラウザの自動操作を身につけよう

■ 本講座を受講してできるようになること

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

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

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

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

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

課題内容

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

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

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

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

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

[問1] BeautifulSoupを使ってスクレイピングしよう

  1. requestsモジュールをインポートしましょう。
  2. requestsのgetメソッドで次のurlのサイト情報を取得するコードを書きましょう。変数名rとします。
  3. r.status_codeでレスポンスを確認しましょう。
  4. contentメソッド使い初めから500文字抽出しましょう。
  5. BeautifulSoupをインストールしましょう。
  6. 変数rのhtmlを解析します。BeautifulSoupの引数にr.contentとhtml.parserを与え、変数名soupに格納しましょう。
  7. 変数soupにprettifyメソッドでhtml要素をprint出力しましょう。
  8. 変数soupにget_textメソッドで文字列を出力しましょう。
  9. titleメソッドを使って、soupのタイトルを文字列で出力しましょう。
  10. find_allメソッドを使ってaタグのリンクを取得し出力してみましょう。
  11. find_allメソッドの引数にTrueを渡し、for文で変数soupのタグ名一覧をリスト化しましょう。
  12. findメソッドを使ってdivタグのクラス名'list ect-entry-card front-page-type-index'の要素を取得し、変数名contentsに格納しましょう。
  13. 変数contentsからfind_allメソッドを使いaタグを取得し、変数名get_aに格納しましょう。
  14. 変数get_aの長さを出力しましょう。
  15. タイトルリンクのリストを作成します。まず、変数名title_linksという空の配列を用意しましょう。for文を使い変数get_aの各配列要素にアクセスし"href"を取得します。それを変数title_linksに追加しましょう。エラーが出ても対応できるよう、try exceptで記述しましょう。
  16. タイトルのリストを作成します。変数名titleの空の配列を用意し、先ほどと似た操作をしtitleをリスト化しましょう。
  17. 変数resultを用意し、辞書型でkey名は'titl'eと'link'にし変数titleとtitle_linksを格納しましょう。
  18. pandasをインポートし、resultをdfというデータフレームに格納しましょう。

[問2] キーワードを入力してスクレイピングをしよう

  1. requestsモジュールをインポートしましょう。
  2. 変数名keywordに'youtube'を代入しましょう
  3. 変数名urlにサイトを検索するurlを代入しましょう。対象サイトは
    キノブログ デモサイトで変数keywordを検索します。
  4. requestsのgetメソッドで変数urlのサイト情報を取得するコードを書きましょう。変数名rとします。
  5. rのステータスコードを確認しましょう。
  6. BeautifulSoupをインポートしましょう。
  7. 変数rのhtmlを解析します。BeautifulSoupの引数にr.textとhtml.parserを与え、変数名soupに格納しましょう。
  8. 変数soupをfindメソッドを使いクラス名'pagination'を抽出しましょう。変数名はpage_naとしましょう。
  9. 変数page_naをfind_allメソッドを使いクラス名"page-numbers"を抽出しましょう。変数名はpage_numとしましょう。
  10. 変数page_numのインデックス0番目の文字列を出力しましょう。
  11. 変数名pagesの空の配列を用意しましょう。for文を使い、page_numの各要素から文字列を抽出し変数pagesに追加しましょう。
  12. URLのリスト化をします。まず、変数名urlsの空の配列を用意しましょう。pagesの一番大きい数字を変数last_pageとします。キノブログ デモサイトの検索"youtube"の各ページをfor文を使いurlを作成し、変数urlsに追加しましょう。
  13. 変数urlsを使い、for文を使って各サイトにアクセスし、link, title, snippet をそれぞれ、links, titles, snippetsという配列に格納しましょう。
  14. 変数名resultにkey名は'title', 'link', 'snippet'とし変数titles, links, snippetsを辞書型で格納しましょう。
  15. pandasをインポートし、変数resultをデータフレームにして、csvファイルとして提出しましょう。