PythonでSeleniumを用いてWebスクレイピングの勉強をしています。
"serch word"をメルカリで検索をかけて、出てきた商品それぞれのURLを取得したいのですが、下記のようにエラーが出力され思い通りにプログラムが動きません。
どこか間違えているところや解決策が思い浮かんだ方がいらっしゃればご回答宜しくお願い致します。
Python
1import pandas as pd 2from selenium import webdriver 3import time 4import sys 5import os 6import csv 7 8driver = webdriver.Chrome(executable_path=r'C:\Selenium_re\chromedriver.exe') # ブラウザを起動 9 10serch_word = "ルンバ" #検索ワードを設定 11words = serch_word.split(" ") 12serch_words = words[0] 13for i in range(1,len(words)): 14 serch_words = serch_words + "+" + words[i] 15 16#URLを設定する 17url = "https://www.mercari.com/jp/search/?keyword=" + serch_words #メルカリのURLを設定 18 19page = 1 20 21#リストを作成 22columns = ["Name","price","sold","URL"] 23df = pd.DataFrame(columns=columns) 24 25#設定したURLを開く 26driver.get(url) # urlを開く 27 28''' 29try: 30''' 31while page <= 100: 32 #商品ごとのページ情報を取得(CSSの情報で選択している) 33 posts = driver.find_elements_by_css_selector("body > div.default-container > main > div.l-content > section > div.items-box-content.clearfix > section:nth-child(1) > a") #例ではitem-boxの前にピリオドある 34 #何ページの情報を取得しているか表示 35 print(str(page) + "ページを取得中") 36 37 #商品ごとの名前や価格、購入済みかどうか、URLを取得 38 for post in posts: 39 #商品名 40 title = post.find_element_by_css_selector("body > div.default-container > main > div.l-content > section > div.items-box-content.clearfix > section:nth-child(1) > a > div > h3").text 41 42 #商品価格 43 price = post.find_element_by_css_selector("body > div.default-container > main > div.l-content > section > div.items-box-content.clearfix > section:nth-child(1) > a > div > div > div.items-box-price.font-5").text 44 45 #余計なものを削除 46 price = price.replace('¥', '') 47 price = price.replace(',', '') 48 49 #購入済み = 1, 未購入 = 0 50 sold = 0 51 if len(post.find_elements_by_css_selector("item-sold-out-badge")) > 0: 52 sold = 1 53 54 #URLを取得 55 URL = post.find_element_by_css_selector("a").get_attribute("href") 56 se = pd.series([title, price, sold, URL],columns) 57 df = df.append(se, columns) 58 59 page += 1 60 #次のページに進むためのURLを取得 61 url = driver.find_element_by_css_selector('body > div.default-container > main > div.l-content > ul > li.pager-next.visible-pc > ul > li:nth-child(1)').get_attribute('href') 62 print("Morving to next page.....") 63''' 64except: 65''' 66print("Next page is nothing") 67 68driver.quit 69 70filename = "mercari" + serch_word + ".csv" 71df.to_csv(filename, encoding = 'utf-8-sig') 72
1ページを取得中 Traceback (most recent call last): File "C:\Python\test0.py", line 55, in <module> URL = post.find_element_by_css_selector("a").get_attribute("href") File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 430, in find_element_by_css_selector return self.find_element(by=By.CSS_SELECTOR, value=css_selector) File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 659, in find_element {"using": by, "value": value})['value'] File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute return self._parent.execute(command, params) File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"a"} (Session info: chrome=77.0.3865.120)