Progateの学習項目をスクレイピングして進捗表を作成した

はじめに

先ほど呟いたように、進捗表作成のために、レッスン項目をスクレイピングしていく。

ゴール

googleスプレッドシートで作成した以下の進捗表の「タスク」に、スクレイピングで取得したProgateのレッスン項目が入力されていること。

ゴールまでのステップ

  1. PythonでProgateのレッスン項目をスクレイピングするようなコードを書く
  2. 1のコードを実行する
  3. 出力結果をコピー&ペーストして進捗表を完成させる

ライブラリのインポート

requestsとBeautifulSoupをインポートした(1~2行目)。

この二つのライブラリについては、以前書いた記事を参考にしていただきたい。

ページのURLをurlという変数に代入し(4行目)、urlから取得した解析のためのHTMLの情報をresponseという変数に代入する(5行目)。

responseのHTMLを出力しようとした(7行目)。

1行目でエラー発生。requestsモジュールがないために起こっているエラー。

以下の手順でインストールしていこう。

pythonとExcelでWebスクレイピング Part1 | ki-hi-ro.com

いろんな処理が走って、インストールが完了したようだ。

再び、Pythonの実行を試みると、別のエラーが発生。今度は、bs4モジュールがないのが原因。

以下の手順で、インストールしていこう。

pythonとExcelでWebスクレイピング Part1 | ki-hi-ro.com

こちらもいろんな処理が走り、無事インストールが完了したようだ。

pythonとExcelでWebスクレイピング Part1 | ki-hi-ro.com

必要な2つのモジュールのインストールが完了したところで、再び、ページ内容の取得を試みた。

次に発生したエラーは、ImportError。タイポが原因のようだ。BeautilfulSoupとしてしまっていた。

BeautifulSoupに修正した。

HTML取得

HTML情報を持ってくることができた。

解析のために、このHTMLに対して、BeautifulSoupを使用する。

pythonとExcelでWebスクレイピング Part2 | ki-hi-ro.com

今回は、先ほど取得したWEBサイトの情報がresponse.textとなる。

7行目で、soupにBeautifulSoupのオブジェクトを代入した。こういったものをオブジェクトと呼ぶべきなのかについては、別の記事で検討していきたい。

このsoupに対して、selectメソッドを使用していく。(以下の1つ目の方法)

pythonとExcelでWebスクレイピング Part2 | ki-hi-ro.com

reactのデータは取得できない

今回取得したい要素のセレクタは、chapter-listの中にある。しかし、reactからデータを持ってきているようで、HTMLでは取得できなかった。

要素の検証で確認すると、react-chapter-listの中に、chapter-listがあった。元のHTMLでは出現しておらず、reactの処理を行った結果、chapter-listが出力されたと考えられる。

要素の検証で、セレクタをコピーしたものを、selectメソッドの引数に指定して(8行目)、出力してみたら(9行目)、空のリストだった。

HTML要素をローカルにコピー&ペーストして解析

一度、要素の検証でHTMLをコピーしたものを、自分のサーバーにアップして、それをスクレイピング対象にしてみよう。

と思ったが、ローカルで解析できる方法を見つけた。

ローカルファイルにrequestsしてBeautifulsoupを使いたいとき #Python – Qiita

レッスンの項目名が含まれている以下の部分をhtmlファイルにした。

ブラウザで開くとこんな感じ。

同階層においたので、./ファイル名でurlを指定した(4行目)。with文、openとreadを使用して、ローカルのファイルの読み込みを行い、変数rに代入した(5~6行目)。BeautifulSoupの第一引数には、変数rを指定した(8行目)。

selectメソッドに渡したのは、今回取得したいレッスン名を囲っているa要素のセレクタ(9行目)。

elemsには(10行目)、以下のリストが入っている。

resson_ttl(10行目)を出力すると、以下のようになる。

ここからテキストを抜き出すために、for文の中身で、textメソッドを使用した(11行目)。そうすると、以下のように、綺麗にテキスト部分を抜き出すことができた。

進捗表の作成

最後のステップを進めていこう。進捗表のタスク部分に上記をコピーしたものを貼り付けた。

PLUSという文字を取り除くために、D列に「SUBSTITUTE(Aセル, “PLUS”, “”)」を入力した。

それをコピーして、値で貼り付ける。D列は削除し、完了のチェックボックスを追加して、進捗表が完成した。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

投稿ID : 23153