【テキストへ保存】Googleの検索結果をスクレイピング01

検索結果をスクレイピング

前回はメルカリのスクレイピングをSeleniumで行いました。

【完結編】メルカリをWebスクレイピング03

2022年2月27日

今回は「BeautifulSoup」を使ってみたいということで、
メルカリと比べると大分短いソースコードになりますが、
・Googleでキーワード検索 → 表示された結果をスクレイピング
を行いたいと思います。

早速ですが今回のコードです。

ヘッドレスモードで実行しているので、
Pyファイルを実行してもWebブラウザは起動しません!
もし動作を見ながら動かしたい場合は
14行目の「,options=options」
を削除してください。
解説

Googleの検索結果は
表示したい件数とキーワードを送信することで表示されています。

例えば「Python Webスクレイピング」
で検索したい場合のURLは以下のようになっています。

[num]の後に表示したい件数
[q]の後にキーワード。
をそれぞれ送信したら検索が行えます。
numの方ですが、どうやら件数-1件が検索結果となるようです。
なので10件表示したい場合は[11]の数を渡す必要があります。

上記を踏まえた上で、以下のコードになります。
[pages_num]は表示したい検索結果の件数
[key_word]は検索内容ですね。

今回表示したい件数は10件。
キーワードは「python Webスクレイピング」です。
[url]には、フォーマットを用いています。
1つ目の{}には表示する件数。
2つ目の{}にはキーワード。

がそれぞれ入ります。

driver.get

SeleniumでURLを取得 → 表示。
表示されたWebサイトのHTMLをBeautifulSoupで解析。

を行っています。
なぜここでSeleniumを使用しているかと言いますと、
Javascriptが使用されているページ(Googleの検索結果)は
・requests.get(url)
・driver.get(url)

でChromeで検証ツールを用いた時と実行したときの要素が変わってしまうのですね!
詳しくは下記をご覧くださいませ。

Google検索後に検証ツールから取得したClassが見つからない

2022年2月28日
なので今回は「driver.get」を使用して「BeautifulSoup」で解析を行っています!

取得するclass
ここは単純に検索結果のclassを取得しています。

driver.getしないと、このclassの要素が実行時に見つかりません。

取得したデータの処理

欲しいのは、検索結果の
・順番
・タイトル
・URL

になります。
以下のコードの部分ですね。

取得方法はいくつかあると思いますが、
・順番はforループで回す変数「i」で取得
・タイトルは「page_title.h3.text」でテキストのみを取得
・URLは「href」のみを取得

この時「href」属性は「/url?q=」という部分まで引っ張ってくるので、「replace」を使用して「/url?q=」は削除(空白へ置換)しています。
forの最後にはappendを使用して1行毎に「i,title,url」を追加していきます。
最後にテキストへと書き込みを行います。
しかしこの状態だとエラーになってしまうので
12行目でStr型へ変換しています。

テキストへ書き込む

ここはおなじみですね。

Googleサーチというテキストファイルを作成して、中にappendしたリストを書き込んでいます。
その時に1行ずつ改行して書き込むように改行コードをjoinしています。
出来上がったテキストファイルはこのような形となります。
※ 実際は10件表示されます。

今回も最後は駆け足気味!
とりあえずGoogleの検索結果も意外と簡単にスクレイピングが行えました。
テキストへの書き込みも良い感じですね。

今回は以上となります。
最後までお読み頂きありがとうございました!