前提・実現したいこと
pythonでgoogle検索結果(タイトル・リンク・ディスクリプション)を自動抽出したいです。
調べながら、タイトルとリンクはそれぞれ別ファイルに保存する形で抽出できるようになりましたが、titleタグのディスクリプションがどうしても抽出できません。
span で結合されていて、どのように指定したらいいかもわかりません。
該当のソースコード
python
1import time # スリープを使うために必要 2from selenium import webdriver # Webブラウザを自動操作する(python -m pip install selenium) 3import chromedriver_binary # パスを通すためのコード 4driver = webdriver.Chrome() # Chromeを準備# サンプルのHTMLを開く 5driver.get('https://www.google.com/') # Googleを開く 6search = driver.find_element_by_name('q') # HTML内で検索ボックス(name='q')を指定する 7search.send_keys('がん 検査') # 検索ワード:例 がん 検査を送信する 8search.submit() # 検索を実行 9time.sleep(3) # 3秒間待機 10 11def ranking(driver): 12 i = 1 # ループ番号、ページ番号を定義 13 i_max = 22 # 仮に最大22ページまで分析すると定義 14 title_list = [] # タイトルを格納する空リストを用意 15 link_list = [] # URLを格納する空リストを用意 # 現在のページが指定した最大分析ページを超えるまでループする 16 while i <= i_max: 17 class_group = driver.find_elements_by_class_name('yuRUbf') # タイトルとリンクはclass="yuRUbf"に入っている 18 19 for elem in class_group: # タイトルとリンクを抽出しリストに追加するforループ 20 title_list.append(elem.find_element_by_class_name('LC20lb').text) #タイトル(class="LC20lb") 21 link_list.append(elem.find_element_by_tag_name('a').get_attribute('href')) #リンク(aタグのhref属性) # 「次へ」は1つしかないが、あえてelementsで複数検索。空のリストであれば最終ページの意味になる。 22 if driver.find_elements_by_id('pnnext') == []: 23 i = i_max + 1 24 else: # 次ページのURLはid="pnnext"のhref属性 25 next_page = driver.find_element_by_id('pnnext').get_attribute('href') 26 driver.get(next_page) # 次ページへ遷移する 27 i = i + 1 # iを更新 28 time.sleep(3) # 3秒間待機 29 return title_list, link_list # タイトルとリンクのリストを戻り値に指定 30 31title, link = ranking(driver) # ranking関数を実行してタイトルとURLリストを取得する 32 33with open('title.txt', mode='w', encoding='utf-8') as f: 34 f.write("\n".join(title)) 35with open('link.txt', mode='w', encoding='utf-8') as f: 36 f.write("\n".join(link)) 37 38driver.quit() # ブラウザを閉じる 39
試したこと
・タイトル・リンクと同様に”ディスクリプションを入れる空リスト”を作成
・タイトルとリンクの空リストにappendした後の行に
class_group2 = driver.find_elements_by_class_name('aCOpRe')と挿入し、抽出したいディスクリプションの箇所を指定
⇒但し、そのクラスの中でさらに抽出したい個所がspan emで複数結合されていてできません。
補足情報(FW/ツールのバージョンなど)
google クロム83
クロムdriverも同じ83です
回答1件
あなたの回答
tips
プレビュー