集めたデータは、どのように活用するの?
というわけで、今回はYahoo知恵袋の質問の検索結果の取得および、質問の詳細ページの取得を例にスクレイピングの実装例を紹介します。
さらに、集めたデータの活用例としてword2vecとPCAを用いて近い単語をグラフにプロットする例も紹介します。
準備
まずは、スクレイピングするための必要なものを準備します。
・pythonの基本的な文法の知識(この記事では解説しません)
・seleniumという自動テストで使用するライブラリ
・chromedriverというGoogle Chromeのドライバ
seleniumのインストール
seleniumをインストールします。
インストールは、以下のコマンドで実行できます。
pip install selenium
chromedriverのインストール
以下のサイトに行き、Google Chromeのドライバをダウンロードします。
https://chromedriver.chromium.org/downloads
インストールされているGoogle Chromeブラウザのバージョンに合わせたドライバをダウンロードします。
Chromeのバージョンは、以下の手順で確認ができます。
- メニューから「Chrome」を選択する
- 「Google Chromeについて」を選択する
- 画面内の「Chrome について」の部分にバージョンが記載されています。
■ドライバーを間違えると・・・・
プログラム実行時、ドライバーを間違えていると、以下のようなエラーが出ます。
SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 81
そのような場合は、バージョンを確認してダウンロードします。
![]() |
UP主(筆者)は、ドライバーのエラーで1日中はまっていたようですよ。
よって、ドライバーのバージョンは注意深く進めましょう。
xpathを調査する
取りたい部分のxpathを調べます。
xpathを調べるために筆者は、Google Chromeを使用しています。
質問の検索結果のxpathを取得する手順を記載します。
- マウス右クリックしてメニューを出す
- 「検証」をクリックする
- ブラウザーの右側にhtmlソースが出てくることを確認
- 該当するhtmlソースのところで右クリックしてメニューを出す
- 「Copy」を選択する
- 「Copy XPath」を選択しクリップボードにXPathをコピーする
スクレイピングをやってみる
では、実際にスクレイピングをします。
この記事では、以下の2つのページをスクレイピングしています。
・検索結果の質問一覧から各詳細へのリンク情報
・質問詳細の質問文とアンサー(回答)
スクレイピング方法については、実際のコードを使って解説します。
これらのコードはgitに上げたので、全体をみたいときは参考にしてください。
検索結果の質問一覧
この例では、検索結果をcsvに書き出す
質問詳細の質問文とアンサー
その後に、csvからリンクを1つずつ読み込み
スクレイピング結果を図にプロットするよ
![]() |
スクレイピングのやり方わかったけど、何万文字もあるテキストデータなんてどうするねん?
ひとつひとつ丁寧にみている余裕なんてあると思う?
![]() |
要約して、ユーザの発言内容の傾向を調べてみてはどう?
具体的な要約方法の一つは、2次元の図にプロットしてみることだよ。
スクレイピング結果を2次元の図にプロットすると以下のような図を作ることができ、ユーザの発言内容の傾向を”なんとなく”調べることができます。
2次元にプロットするためには、以下の技術を使っています。
- 日本語の形態素分析
- word2vecによる単語のベクトル化
- PCA(主成分分析)による次元圧縮
- matplotlibによる図にプロット
![]() |
それにしてもかなり汚い図だね~
単語が重なりすぎて、傾向がつかみずらいな~
![]() |
up主(筆者)が無駄な単語も出力してしまっているからね〜。
本当は、名詞のみ出力するなどの対応が必要だよ。
面倒だからやっていないらしいよ。
具体的な実装方法については、以下の記事でまとめたので参考にしてください。
スクレイピングでデータを集めてみたんだけど、10000行とかデータが多すぎて分析が面倒だよ。 なんかいい方法ないかな? […]
まとめ
今回はyahoo知恵袋を例にスクレイピング方法、および集めたデータを2次元にプロットする方法を述べました。
プログラミング・実務経験がある方も必見!
空いた時間をスキルアップ・収入増に使ってみませんか?