実現したいこと
WEBから任意の情報を取得して、CSVファイルを作成する。
前提
プログラミング初心者です。
お忙しい中大変恐縮ですが、御指南いただけますと幸いです。。
WEB上の情報をスクレイピングするプログラムを実行したのですが
抽出されたCSVファイルのデータが空となってしまいます。
エラーコードにヒントが入っているかもしれませんが、調べてもわからず質問させていただきました。
発生している問題・エラーメッセージ
検索キーワード=参考書 test.py:12: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome(r"/Users/*****/*****/*****/chromedriver") Getting the page 1 ... test.py:23: DeprecationWarning: find_elements_by_* commands are deprecated. Please use find_elements() instead items = driver.find_elements_by_class_name("items-box") test.py:32: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead next_page = driver.find_element_by_css_selector("li.pager-next .pager-cell:nth-child(1) a").get_attribute("href") Last page! Scraping is complete!
該当のソースコード
python
1from selenium import webdriver 2import time 3import pandas 4 5#キーワード入力 6search_word = input("検索キーワード=") 7 8# メルカリ 9url = 'https://www.mercari.com/jp/search/?keyword=' + search_word 10 11# chromedriverの設定とキーワード検索実行 12driver = webdriver.Chrome(r"/Users/*****/*****/*****/chromedriver") 13driver.get(url) 14 15# ページカウントとアイテムカウント用変数 16page = 1 17item_num = 0 18item_urls = [] 19 20while True: 21 print("Getting the page {} ...".format(page)) 22 time.sleep(1) 23 items = driver.find_elements_by_class_name("items-box") 24 for item in items: 25 item_num += 1 26 item_url = item.find_element_by_css_selector("a").get_attribute("href") 27 print("item{0} url:{1}".format(item_num, item_url)) 28 item_urls.append(item_url) 29 page += 1 30 31 try: 32 next_page = driver.find_element_by_css_selector("li.pager-next .pager-cell:nth-child(1) a").get_attribute("href") 33 driver.get(next_page) 34 print("next url:{}".format(next_page)) 35 print("Moving to the next page...") 36 except: 37 print("Last page!") 38 break 39 40# アイテムカウントリセットとデータフレームセット 41item_num = 0 42columns = ["item_name", "cat1", "cat2", "cat3", "brand_name", "product_state", "price", "url"] 43df = pandas.DataFrame(columns=columns) 44 45try: # エラーで途中終了時をtry~exceptで対応 46 # 取得した全URLを回す 47 for product_url in item_urls: 48 item_num += 1 49 print("Moving to the item {}...".format(item_num)) 50 time.sleep(1) 51 driver.get(product_url) 52 53 item_name = driver.find_element_by_css_selector("h1.item-name").text 54 print("Getting the information of {}...".format(item_name)) 55 56 cat1 = driver.find_element_by_css_selector("table.item-detail-table tbody tr:nth-child(2) td a:nth-child(1) div").text 57 cat2 = driver.find_element_by_css_selector("table.item-detail-table tbody tr:nth-child(2) td a:nth-child(2) div").text 58 cat3 = driver.find_element_by_css_selector("table.item-detail-table tbody tr:nth-child(2) td a:nth-child(3) div").text 59 try: # 存在しない⇒a, divタグがない場合をtry~exceptで対応 60 brand_name = driver.find_element_by_css_selector("table.item-detail-table tbody tr:nth-child(3) td a div").text 61 except: 62 brand_name = "" 63 64 product_state = driver.find_element_by_css_selector("table.item-detail-table tbody tr:nth-child(4) td").text 65 price = driver.find_element_by_xpath("//div[1]/section/div[2]/span[1]").text 66 price = price.replace("¥", "").replace(" ","").replace(",", "") 67 68 print(cat1) 69 print(cat2) 70 print(cat3) 71 print(brand_name) 72 print(product_state) 73 print(price) 74 print(product_url) 75 76 se = pandas.Series([item_name, cat1, cat2, cat3, brand_name, product_state, price, product_url], columns) 77 df = df.append(se, ignore_index=True) 78 print("Item {} added!".format(item_num)) 79 80except: 81 print("Error occurred! Process cancelled but the added items will be exported to .csv") 82 83df.to_csv("{}.csv".format(search_word), index=False, encoding="utf_8") 84driver.quit() 85print("Scraping is complete!")
試したこと
ごめんなさい。エラーの検討がつかず何も手が付かない状態です。
補足情報(FW/ツールのバージョンなど)
pythonで実行しています。
回答1件
あなたの回答
tips
プレビュー