前提・実現したいこと
プログラミング初心者です。Python3.6.4でWebスクレイピングの
コードを書いています。あるサイトで検索をし、該当する記事の
日付・タイトル・URLをすべて取得してCSVファイルに保存すると
いうものです。その際、複数ページにわたって検索結果が表示される
ため、「次へ」というテキストリンクが表示されている場合は
そのリンクをクリックして繰り返し処理を行い、「次へ」という
テキストリンクが消えた時に繰り返し処理をやめる処理を書こうと
しました。しかし、次のようなエラーメッセージが表示されて
停止してしまいます。
発生している問題・エラーメッセージ
NoSuchElementException Traceback (most recent call last)
該当のソースコード
Python3.6.4
1#サイトのトップページで検索キーワードを入力して 2#該当記事を検索し、CSVファイルに保存するプログラム 3 4from selenium import webdriver 5import csv 6import time 7 8CHROME_PATH = "C:\xxxxxxxxxxx" 9TARGET_URL = "https://xxxxxxxxxxx/" 10driver = webdriver.Chrome(CHROME_PATH) 11driver.get(TARGET_URL) 12 13driver.find_element_by_class_name("searchInput").send_keys("xxxxxxxxxxx") 14driver.find_element_by_class_name("searchButton").click() 15driver.find_element_by_xpath('//a[contains(text(), "xxxxx")]').click() 16 17csvw = csv.writer(open("output.csv", "w", encoding = "utf-8", newline = "\n"), delimiter = "\t") 18 19ydate = [] 20ytitle = [] 21yurl = [] 22 23c1 = 1 24while(True): #この部分でエラーが発生しています 25 elem = driver.find_elements_by_xpath('//div[@class="xxxxxxxxxxx"]') 26 for e in elem: 27 ydate.append(e.find_element_by_class_name("d").text) 28 ytitle.append(e.find_element_by_class_name("t").text) 29 yurl.append(e.find_element_by_tag_name("a").get_attribute("href")) 30 nextpage = driver.find_element_by_xpath('//span[contains(text(), "次へ")]') 31 if nextpage == False: 32 break 33 else: 34 nextpage.click() 35 c1 += 1 36 37csvw.writerow([ydate, ytitle, yurl])
試したこと
while文内にtry-exceptでNoSuchElementExceptionが発生した場合は
continueする、という処理を書きました。しかし、やはり同じエラーが
出てしまいます。
「次へ」というテキストリンクが取得できない場合(while文内のnextpage
変数にxpathで取得した要素を代入している部分で中身が何も取得できない場合)、
if-else文もしくはexcept文の処理に移る前にエラーが出てしまうため、こうした
記述には意味がないんだろうな……とはぼんやり理解できているのですが、
正しい処理をどう書けばいいのかわからないという状態です。
ご教示よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Windows10マシン、ChromeでJupyterNotebookを使っています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。