最近、本当にAmazonの話題ばかりです。
あくまで、このブログ上ですけどね。
今回は、セラー(販売者・出品者)の情報を収集します。
情報とは正確に言うと、セラーIDです。
このセラーIDさえあれば、そのセラーの取り扱い商品の情報も収集できるでしょう。
また、販売者ページにもアクセス可能となります。
なお、技術的にはPythonでSeleniumを使います。
今回説明する方法によって、本日(2020年9月12日)時点で2466件のセラーIDを収集できました。
おそらく、ある程度の売上規模があるセラーの情報だと思います。
本記事の内容
- AmazonのセラーIDを取得する目的
- セラーIDを取得するプログラム仕様(スクレイピング仕様)
- Amazonでスクレイピングする上での準備
- セラーを取得するサンプルプログラム
それでは、上記に沿って説明していきます。
AmazonのセラーIDを取得する目的
まず、AmazonのセラーIDを取得する目的を説明しておきます。
一般的には、AmazonのセラーIDを取得するのは、同業他社だと思います。
転売ヤー(転売家)も含まれるでしょうね。
つまり、セラーID取得の目的は、競合の取扱い商品を調査することになります。
価格や商品説明、いろいろと調査する内容はあるのでしょう。
しかし、私は目的が異なります。
Amazonのサクラ(やらせ)レビューに対する怒りが、モチベーションになっています。
詳細は、次の記事をご覧ください。
目的は、セラーがやらせの黒幕かどうかを把握することになります。
セラーにさえ注目すれば、商品レベルで警戒する必要はなくなりますからね。
商品レベルでは、サクラチェッカーやレビュー探偵があります。
これらのサービスは、本当に素晴らしいサービスだと思います。
そのため、以下のようなプログラムを開発したぐらいです。
でも、これらを使う中で不備というか甘い部分を見つけました。
やらせレビュー(レビューをじっくり分析して判断)をサクラだと判定していなかったのです。
そこで、個人的に考えてある結論にたどりつきました。
商品自体に罪はなく、それを出品するセラーに罪があるのだと。
そうであれば、セラーを罪人かどうか判定すればいいのです。
そのため、まずはセラー一覧が必要になりました。
セラーIDを取得するスクレイピング仕様
スクレイピング対象となるセラー一覧のページから説明します。
スクレイピング対象ページ
Amazonのサイトにおいて、セラーを一覧で表示してあるページがあります。

導線の説明は、結構面倒です。
興味があれば、自分で見つけてください。
こういう作業は、スクレイピングのスキルUPにつながります。
なお、上記「パソコン・周辺機器」のセラー一覧は、以下のURLとなります。
https://www.amazon.co.jp/s/other?rh=n%3A2127209051&pickerToList=enc-merchantbin
これを「家電・カメラ」のセラー一覧画面にしたい場合はどうすればいいのか?
これについて説明します。
まず、Amazonのトップへアクセス。

ここでカテゴリーを「家電・カメラ」にして、検索ボタン(虫眼鏡)をクリック。
何も入力する必要はありません。

そうすると、URLが以下のように変更します。
https://www.amazon.co.jp/b?node=3210981
簡単に説明すると、「家電・カメラ」のカテゴリーIDが3210981ということです。
このカテゴリーIDを上記のURLにあてはめれば、「家電・カメラ」のセラー一覧が表示されます。
https://www.amazon.co.jp/s/other?rh=n%3A2127209051&pickerToList=enc-merchantbin
↓
https://www.amazon.co.jp/s/other?rh=n%3A3210981&pickerToList=enc-merchantbin
なお、「%3A」は「:」をURLエンコードしたモノです。
他のカテゴリーも同じ要領で対応できます。
ただし、「node=3210981」のようなパターンのみ対象です。
このパターンではないURL(カテゴリー)の場合は、セラー一覧がないということになります。
スクレイピング対象要素
セラーは、以下のタグで構成されています。
<li> <span class="a-list-item"> <a class="a-link-normal" title="ECカレント" href="/s/ref=sr_in_-2_p_6_29?fst=as%3Aoff&rh=n%3A2127209051%2Cp_6%3AA3KMNJ3DXW7OH6&bbn=2127209051&ie=UTF8&qid=1599885710&rnid=2150384051"> <span class="refinementLink">ECカレント</span> <span class="narrowValue"> (4,738)</span> </a> </span> </li>
「a-list-item」クラスを持つ要素を取得するだけで対応できます。
こうやって取得した要素内のaタグのhrefを取得します。
href内の「p_6%3AA3KMNJ3DXW7OH6」がセラーIDの部分となります。
URLエンコードする前は、「p_6:A3KMNJ3DXW7OH6」ということですね。
Amazonでスクレイピングする上での準備
実際にスクレイピングをしていきます。
ただ、その前にAmazonでスクレイピングを行う準備を整えておいてください。
- Amazonでスクレイピングを行う心得
- Amazonでスクレイピングを行う環境
Amazonでスクレイピングを行う心得
一応、Amazonの規約上ではスクレイピングが禁止されています。
ただ、その規約は意味がないと切り捨てています。
そのことを次の記事で詳しく説明しています。
Amazonでスクレイピングを行う環境
プログラムは、Pythonが大前提です。
その上で、Seleniumの利用が必須となります。
インストールから利用方法まで次の記事でまとめています。
セラーを取得するサンプルプログラム
コピペで動きます。
ただし、「CHROMEDRIVER = “chromedriver.exeのパス”」は書き換えてください。
import re import bs4 from selenium import webdriver from selenium.webdriver.chrome.options import Options AMAZON_DOMAIN = "https://www.amazon.co.jp" AMAZON_INIT = AMAZON_DOMAIN + "/gp/help/customer/display.html?nodeId=201909000" CHROMEDRIVER = "chromedriver.exeのパス" NODE_ID = "2127209051" SELLER_LIST_URL = "https://www.amazon.co.jp/s/other?rh=n%3A" + NODE_ID + "&pickerToList=enc-merchantbin" # driver取得 def get_driver(init_flg): # ヘッドレスモードでブラウザを起動 options = Options() options.add_argument('--headless') # ブラウザーを起動 driver = webdriver.Chrome(CHROMEDRIVER, options=options) if init_flg: # クッキー設定(軽いページ) driver.get(AMAZON_INIT) driver.implicitly_wait(5) return driver # Amazonページ取得 def get_page_from_amazon(driver, url): # ターゲット driver.get(url) driver.implicitly_wait(10) # 見つからないときは、10秒まで待つ text = driver.page_source # ブラウザ停止 driver.quit() return text # info取得 def get_info_from_text(text): soup = bs4.BeautifulSoup(text, features='lxml') try: info = [] elems = soup.find_all(class_="a-list-item") for elem in elems: a_elem = elem.find("a") href = a_elem["href"] seller_id = get_search_value("Cp_6%3A(.*)&bbn", href) info.append(seller_id) return info except: return None def get_search_value(ptn, str): result = re.search(ptn, str) if result: return result.group(1) else: return None if __name__ == "__main__": driver = get_driver(True) text = get_page_from_amazon(driver, SELLER_LIST_URL) info = get_info_from_text(text)
infoにセラーIDがリスト形式で入っています。
あとは、これを好みの形で保存してください。
私は、MongoDBに突っ込みました。
MongoDBについては以下が参考になります。
プログラムの説明自体は、ここではしません。
これを理解できないなら、利用するのは危険です。
スクレイピング自体は、何も問題がある技術ではありません。
ただ、スクレイピングのプログラム内でのアクセスが、過度になると問題が出てきます。
簡単な話、DoS攻撃・DDoS攻撃になりかねないのです。
そうならないように、スクレイピングする側は慎重にならないといけません。
アクセスの間に1秒以上の間隔を空けるなどの対応です。
そのようなことを見抜くためには、最低限のコードの理解力は必須となります。
また、スクレイピングのコードを公開する側も慎重さが必要です。
コピペで動かしても、決して過度なアクセスにならないようにしています。
実際、上記のプログラムはAmazonサイトへのアクセスがたった2回です。
たった2回のアクセスで「家電・カメラ」のセラーIDが200件以上一気に取得できます。
こんな便利な技術を使わない手はありません。