モノレートというAmazonでの販売価格・販売数・販売量の推移などのデータがまとめて表示されている便利サイトがあります。
そのサイトをスクレイピング(Webサイトのデータをプログラムで読み取ること)をすれば、転売して利益が出るような商品を簡単に見つけられるのでは?!
と思って、スクレイピングを試してみました!
モノレートをスクレイピングしてみる
結果。結論から言うと、普通にスクレイピングしようとすると無理でした...(T ^ T)
いちおう試してみた結果を書いておきます。
スクレイピングを試してみる
(画像:モノレート | アマゾンのランキング・価格推移・価格比較を、お買い物の前にチェック!)
PythonでSelenium(Webサイトの要素を指定してデータなどを取得できるライブラリ)を使い、勢いでコードを書いてデータが取得できるのか試してみる。
# モノレート詳細ページにアクセスし、データを取得する url = "http://mnrate.com/" # html = urllib2.urlopen(url) # soup = BeautifulSoup(html, "html.parser") driver = webdriver.PhantomJS() driver.get(url) print('現在のページ' + driver.current_url) driver.find_element_by_id('_item_search_inp').send_keys(PRODUCT_TITLE) driver.find_element_by_id('_graph_search_btn').click() driver.set_page_load_timeout(15) print('現在のページ' + driver.current_url) item_list = driver.find_element_by_class_name('search_item_list') item_summary_list = item_list.find_element_by_class_name('item_summary_list_item') link_text = item_summary_list.find_element_by_class_name('original_link').text print('link_text: {}'.format(link_text)) link = item_summary_list.find_element_by_link_text(link_text) print('link: {}'.format(link)) retry_exceed_count = 2 count = 0 while count < retry_exceed_count: try: link.click() driver.set_page_load_timeout(15) break except Exception as e: print('{}回目のアクセスに失敗...e: {}'.format(count + 1, e)) count += 1 print('現在のページ' + driver.current_url) new_data = driver.find_element_by_css_selector('li.new_data') new_price = new_data.find_element_by_class_name('price').text new_quantity = new_data.find_element_by_class_name('quantity').text print('new_price: {}, new_quantity': {}.format(new_price, new_quantity)) return
「これでコードを実行すれば、価格のデータが取得できているはず!」と思って実行した結果...
$ fpy test.py /usr/local/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ' 現在のページhttp://mnrate.com/ 現在のページhttp://mnrate.com/search?i=All&kwd=Nintendo-Switch-%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81-%E3%83%8D%E3%82%AA%E3%83%B3%E3%83%96%E3%83%83%BC-%E3%83%8D%E3%82%AA%E3%83%B3%E3%83%AC%E3%83%83%E3%83%89&s= link_text: Nintendo Switch 本体 (ニンテンドースイッチ) 【Joy-Con (L) ネオンブルー/(R) ネオンレッド】&【Amazon.co.jp限定】液晶保護フィルムEX付き(任天堂ライセン... link: <selenium.webdriver.remote.webelement.WebElement (session="7760d150-f94a-11e8-ad63-1548eadf91c3", element=":wdc:1544095905055")> 現在のページhttp://mnrate.com/item/aid/B07JJ2TVHB new_price: , new_quantity:
最後の行にデータが出力されてない...(; ・◇・)
データが取得できていれば、「new_price: ¥32,072 , new_quantity: 196」と表示されるはずなのになぜか空白。
データが取得できないようになっている...??
試しに、Seleniumでアクセスしたページのソースコードをファイルに書き込んで中身を確認しました。
データが軒並み0になってますね。スクレイピングでデータを取ってくれるなという意思が感じられます( ´ v ` )ノ
JavaScriptで動的にあとから数値をくっつけてHTMLを生成しているんでしょうか。
①Seleniumでページ読み込み→②データ取得→③JSでページのHTML生成される...という流れになっていて、②の段階ではデータがないということなのかなと。
頑張ればデータ取得できるのかもしれませんが、データを取得されなくないという意思のあるサイトからデータを取得するのはコスパが悪いと思うので、ここでスクレイピングによるデータ取得は断念...。
以上、「MONORATE(モノレート)のデータをスクレイピングすれば自動で転売商品見つかるのか試してみた結果」でした。
こちらにも書きましたが、転売って仕組み化すればまだまだ効率的に利益が出る余地がある気がしていて挑戦してみたのですが簡単には実現できなかった。。。悔しい。
転売をする上で、仕入先と販売先の価格を自動で比較・計算して利益が出そうな商品を抽出するプログラムを作れば、超効率化できると思っていましたがそんなに甘くはないですね。
もう少し色々試してみて、価格のギャップ情報を自動抽出するプログラム実現できないか挑戦していきます。
またなにか発見あれば書きます( ・v・)b
スクレイピングで使うPythonをしっかり学びたい方向け
最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。
スッキリわかるPython入門 スッキリわかるシリーズ
そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。
プログラミング言語 Python 3 入門
このコースで学べること
- Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
- ターミナルを使用したPythonの実行
- PyCharmを使用したPython ファイルの作成・デバッグ実行
Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。
Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。
【プログラミング言語 Python 3 入門】をUdemyで見てみる
Pythonで作業の自動化・効率化
Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/
では!