仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・SNS分析・仮想通貨・自動化などに関してよく書く雑記ブログ

MONORATE(モノレート)のデータをスクレイピングすれば自動で転売商品見つかるのか試してみた結果


f:id:virtual-surfer:20181206205048p:plain

モノレートというAmazonでの販売価格・販売数・販売量の推移などのデータがまとめて表示されている便利サイトがあります。

そのサイトをスクレイピング(Webサイトのデータをプログラムで読み取ること)をすれば、転売して利益が出るような商品を簡単に見つけられるのでは?!

と思って、スクレイピングを試してみました!


モノレートをスクレイピングしてみる

結果。結論から言うと、普通にスクレイピングしようとすると無理でした...(T ^ T)

いちおう試してみた結果を書いておきます。


スクレイピングを試してみる

f:id:virtual-surfer:20181206203014p:plain

(画像:モノレート | アマゾンのランキング・価格推移・価格比較を、お買い物の前にチェック!


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でアクセスしたページのソースコードをファイルに書き込んで中身を確認しました。


f:id:virtual-surfer:20181206203801p:plain


データが軒並み0になってますね。スクレイピングでデータを取ってくれるなという意思が感じられます( ´ v ` )ノ


JavaScriptで動的にあとから数値をくっつけてHTMLを生成しているんでしょうか。

①Seleniumでページ読み込み→②データ取得→③JSでページのHTML生成される...という流れになっていて、②の段階ではデータがないということなのかなと。



頑張ればデータ取得できるのかもしれませんが、データを取得されなくないという意思のあるサイトからデータを取得するのはコスパが悪いと思うので、ここでスクレイピングによるデータ取得は断念...。


まとめ

以上、「MONORATE(モノレート)のデータをスクレイピングすれば自動で転売商品見つかるのか試してみた結果」でした。

こちらにも書きましたが、転売って仕組み化すればまだまだ効率的に利益が出る余地がある気がしていて挑戦してみたのですが簡単には実現できなかった。。。悔しい。

www.virtual-surfer.com


転売をする上で、仕入先と販売先の価格を自動で比較・計算して利益が出そうな商品を抽出するプログラムを作れば、超効率化できると思っていましたがそんなに甘くはないですね。


モノレートはデータがまとまった便利サイトなので、スクレイピング対策もされていましたが、貴重な情報が偏在しているサイトは他にもある気がしています。情報を自動で収集できれば小さなチャンスも見いだせるかなと。

note.mu


もう少し色々試してみて、価格のギャップ情報を自動抽出するプログラム実現できないか挑戦していきます。

またなにか発見あれば書きます〜( ・v・)b


では!