実現したいこと
スクレイピングの練習でGithubからトレンドになっている情報を取得し、CSVに保存しようとしていますイメージ説明
発生している問題・分からないこと
上の画像でプログラミング言語を表示しているテキスト部分を取得しようしているのですが、要素が取得できず、空のデータが入ってしまいます。
リスト型でまとめて要素を取得して、テキストデータを抽出しようとしたのですが、データが入っていないのでIndexError: list index out of rangeになり
該当のソースコード
Python
1import time 2import pandas as pd 3from selenium import webdriver 4from selenium.webdriver.common.by import By 5from webdriver_manager.chrome import ChromeDriverManager 6from pathlib import Path 7 8SLEEP_TIME = 3 9CSV_NAME = Path("./output") 10CSV_NAME.mkdir(exist_ok=True) 11CSV_NAME = "./output/github_ranking.csv" 12 13if __name__ == '__main__': 14 try: 15 driver = webdriver.Chrome() 16 url = "https://github.com/trending" 17 driver.get(url) 18 time.sleep(SLEEP_TIME) 19 20 result = list() 21 box_row_elements = driver.find_elements(By.CLASS_NAME, 'Box-row') 22 23 for i_box in box_row_elements: 24 row_data = dict() 25 row_data["title"] = i_box.find_element(By.TAG_NAME, 'h2').text 26 row_data["url"] = i_box.find_element(By.TAG_NAME, 'h2').find_element(By.CLASS_NAME, 'Link').get_attribute("href") 27 lang_elements = i_box.find_elements(By.CSS_SELECTOR, 'div.f6 color-fg-muted mt-2 > span.d-inline-block ml-0 mr-3') 28 29 row_data["lang"] = lang_elements[1].text 30 ↑IndexErrorが発生 31 32 result.append(row_data) 33 34 pd.DataFrame(result).to_csv(CSV_NAME) 35 36 finally: 37 driver.quit()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
「Python selenium find_element 要素取得できない」など検索し、要素がまだ表示されていないかもしれないので数秒待機させたり、画面を大きくしてみたりしましたが上手く行きませんでした。
他にもiframeやjavaScriptの要素の可能性もあったので確認しましたが、違うっぽい?
補足
初心者で拙い文章で申し訳ありませんが、ご回答いただけるとありがたいです。

回答1件
あなたの回答
tips
プレビュー