Pythonを用いて検索結果上位のサイトタイトルを取得したい

実現したいこと

Google検索結果の上位10サイトのタイトルを取得したいのですが、想定通りの結果にならず苦慮しております。
アドバイスをいただければ幸いです。。

前提

事前に検索結果画面のURLを確認し、サイトのタイトルが以下に存在することを確認済です。
・クラス属性の値が"LC20lb MBeuO DKV0Md"のh3タグの要素

そのうえで、取り急ぎ以下のような処理を実装しました。
1.requests.get関数にて検索結果を取得
2.取得結果よりサイトタイトルが含まれているタグ情報(h3タグ)を取得

発生している問題・エラーメッセージ

実装したプログラムは以下通りです。
find_all関数にて対象のタグ情報を変数"title"に格納しておりますが、"title"の値が空となってます。(出力したところ"[]"といったように空の配列になってました。)
いくつか仮定をたてて検証したのですが(詳細は後述)、変数"soup"に適切な値(検索結果)が格納されていないと推測しております。
---プログラム-----
import time
import requests as rq
from bs4 import BeautifulSoup

#検索結果上位10位の情報を取得
response = rq.get('http://www.google.co.jp/search?hl=jp&gl=JP&num=10&q='+'テスト')
time.sleep(5)

soup = BeautifulSoup(response.text,'html.parser')
title = soup.find_all("h3", class_ = "LC20lb MBeuO DKV0Md")
print(title)
---プログラムここまで-----

試したこと

いくつか原因を仮定して検証を実施しました。
1.h3タグのクラス属性の値が固定値ではない可能性
複数のキーワードにて検索しHTMLを確認しましたが、属性値は固定でした。

2.find_all関数の使い方が不適切
さきほどのプログラムを以下通り変更し実行したところ、問題なく値が取得できました。
(サンプルhtmlを直接変数に格納しました。)
---プログラム-----
import time
import requests as rq
from bs4 import BeautifulSoup

html = '''<!DOCTYPE html>

サイトタイトルタイトル 見出し1 小見出し1 コンテンツの内容 '''

soup = BeautifulSoup(html,'html.parser')
title = soup.find_all("h3", class_ = "LC20lb MBeuO DKV0Md")
print(title)
---プログラムここまで-----

3.検索結果が適切に取得できていない
さきほどのプログラムの変数"response "について、テキスト関数を用いてファイル出力して確認しましたが、特に問題がないように見受けられました。
(クラス属性の値が"LC20lb MBeuO DKV0Md"のh3タグも存在しました。)

補足情報(FW/ツールのバージョンなど)

Pythonのバージョンは3.12.0です。
各ライブラリのバージョンは以下通りです。
beautifulsoup4 4.12.2
requests 2.31.0

コメントを投稿

0 コメント