質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

550閲覧

Pyhtonでスクレイピングのプログラムを実行したのですが結果が空になってしまいます。

ForestBamboo

総合スコア17

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2023/02/23 11:49

実現したいこと

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で実行しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2023/02/23 11:59

スクレイピングをする場合は、まずはサイトの利用規約を確認した方が良いです。メルカリは利用規約でこのようなアクセスを禁止してます。 参考) https://help.jp.mercari.com/guide/articles/900/ 抜粋)弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること 法律違反というわけではないので絶対にやってはいけないというわけではないですが、このような公の場で質問するような内容ではないと思います。どうしても質問するのであればもう少し質問の内容を抽象化すべきかとおもいます(メルカリのURLは出さないようにし、かつメルカリのサービスに特化した内容じゃないようにすべき)。
ForestBamboo

2023/02/23 12:11

ご回答ありがとう御座います。 また、ご指摘くださいまして重ねて感謝申し上げます。 おっしゃる通り、こちらで質問させていただくような内容ではないですね。 大変失礼しました。
otn

2023/02/23 13:01 編集

> 抜粋)弊社が提供するインターフェイスとは別の手法を用いてサービスにアクセスすること 全文を読んだわけでは無いですが、この1行だけだと、一般的なウェブブラウザを使ったアクセスは「弊社が提供するインターフェイス」だと思うので、ブラウザを使ったスクレイピングには関係ないかと思います。おそらく他に、プログラムによる自動化したアクセスを禁止するなどの記述があるのでは?
AbeTakashi

2023/02/23 13:54 編集

「弊社が提供するインターフェイス」という表現については「メルカリが提供するWEBサイトやアプリケーション内のユーザインターフェース(例えばリンクボタンや検索フォームなど)」ととらえることもできると思うので、スクレイピングに関係ないとは言い切れないと思います(スクレイピングもそれらを利用してるといえばそうなんでしょうけど微妙な部分もあるかなと)。 もちろん、他にも ・弊社が提供するサービスに繋がっているサーバーやネットワークに対して悪影響を及ぼすこと ・弊社のサービス運営を妨げること ・弊社の事前の書面による許可なく、弊社のサービス外のところで、商業目的で、弊社が提供するあらゆるサービス、コンテンツ、情報、システム、機能、プログラムなどの全部または一部を利用すること などの文言もあり、スクレイピング行為そのものだけで完全にひっかかることはないにせよ、チョット間違ったやり方でひっかかってしまう場合もありそうです。少なくともメルカリはスクレイピングが横行することでサービス全体に影響がでるのはわりと明らかなので、メルカリの運営陣がその辺に神経をすり減らしてるのはほぼ間違いなく、これらの利用規約がある中で安易にスクレイピングしようと考えるのは決して良い行為では無いと思います。
guest

回答1

0

自己解決

解決とさせていただきます。

投稿2023/02/23 12:14

ForestBamboo

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問