Help us understand the problem. What is going on with this article?

Amazonカテゴリ一覧 23,420 件(BrowseNodeデータ収集結果)

More than 3 years have passed since last update.

Amazonの商品カテゴリ(BrowseNode)

Amazon のカテゴリは内部的には BrowseNode って名前で扱われているのだが、その情報を得るための BrowseNodeLookup という API があるものだから、つい収集欲が出てしまいデータ収集してしまった。。

集めてしまったもの (23,420件)

参考:一部抜粋

…
2351649051:Amazonビデオ
  2351650051:カテゴリー別
    2478465051:外国映画
      2478466051:SF
      2478467051:アクション
        2478468051:アジアンアクション
        2478469051:スパイ
        2478470051:パニック
        2478471051:刑事
…
2275256051:Kindle本
  2292699051:文学・評論
    2292754051:小説・文芸
      2292764051:日本の小説・文芸
      2292763051:中国の小説・文芸
      2292756051:アジアの小説・文芸
      2292765051:英米の小説・文芸
…
    2292767051:歴史・時代小説
    2292768051:経済・社会小説
    2292724051:ミステリー・サスペンス・ハードボイルド
    2292700051:SF・ホラー・ファンタジー
    2292725051:ロマンス
    2292701051:エッセー・随筆
    2292736051:古典
…
170563011:日用品
  170566011:食器用洗剤
  170567011:食器洗い機用洗剤
  170575011:野菜洗浄剤
…

BrowseNodeLookup API について

指定の BrowseNode にどのような子要素がぶらさがっているかどうかが、BrowseNodeLookup の応答内 Children 要素によって分かる。これで再帰的に情報を辿れる。

<BrowseNode>
  <BrowseNodeId>163357</BrowseNodeId> 
    <Name>Comedy</Name> 
    <Children>
    <BrowseNode>
      <BrowseNodeId>599826</BrowseNodeId> 
      <Name>Boxed Sets</Name> 
    </BrowseNode>
    <BrowseNode>
      <BrowseNodeId>538712</BrowseNodeId>
      <Name>African American Comedy</Name> 
    </BrowseNode>

最上位 BrowseNode 情報について

ある BrowseNode の子要素が取得できるとして、まず起点となる BrowseNode はどこから求めれば良いのか、というと、BrowseNode の ID 固有値の一覧がところどころに載っていたりする。

ただ、こういった固定値をもとにデータ収集をするのはどうにもしっくりこないので、今回は Amazon のカテゴリ一覧ページを起点とした。

URLに含まれる BrowseNode の ID について

Amazon のページを閲覧しているときの URL を見ると、クエリ文字列内に node=XXXXXX という部分が見つかる。この XXXXXX の部分が BrowseNode の ID。

逆にいうと BrowseNode の ID が分かっていれば、https://www.amazon.co.jp/b/?node=<ID> という URL へのアクセスでそのカテゴリのページが開ける。

BrowseNode の階層や総数について

今回は site-directory 以下の BrowseNode 群を起点として情報を収集したが、実はもっと上層の BrowseNode から辿ると今回の 23,420 件以上の BrowseNode が取得できてしまう。が、さすがに3万を超えたあたりから気が遠くなり始めたのでやめた。

site-directory より上層の BrowseNode が何故分かるのかというと、BrowseNodeLookup の応答内に Ancestors という親を示す要素が含まれているから。

<Ancestors>
  <BrowseNode>
    <BrowseNodeId>549726</BrowseNodeId> 
    <Name>Performing Arts</Name>

重複したツリー構造

ひとつの BrowseNode が複数の子要素を持つのは良いとして、実はひとつの BrowseNode が複数の親要素を持つこともよくある。

…
2275256051:Kindle本
  …
  2293143051:コミック
    …
    3418785051:コミック雑誌 ← 重複
  …
  2275257051:雑誌
    …
    3418785051:コミック雑誌 ← 重複

たとえば上の例では、「3418785051:コミック雑誌」という BrowseNode が「2293143051:コミック」「2275257051:雑誌」両方の子要素としてぶらさがっている。

おわり

こういうデータ収集はあまり真似するようなものではないと思うのでお勧めはしない。詳細は今のところは伏せるができる限り Amazon サーバへの負担が少ない形で情報を集めるよう努力はした。人が集めたデータを眺めるくらいがちょうどよい楽しみ方だと思う。

https://www.amazon.co.jp/gp/site-directory
ちなみにこの site-directory ページの title タグは

Amazon.co.jp - 地球上で最大級の品ぞろえ

である。
たしかにその通りなんだろうなぁ(´・_・`)

kobake@github
C++, C# が本命。それ以外は義理。
http://blog.clock-up.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした