Shop::Wildberries::ProductsList - Wildberries商品リストスクレイパー

スクレイパーの概要
Wildberries商品スクレイパーを使用すると、キーワードによる検索結果、または特定のカテゴリーやブランドの商品リストから商品データを取得できます。これにより、商品リンクのデータベース構築、価格動向の追跡、レビュー数や評価の変化の監視、商品画像の収集、利用可能な色やサイズの情報の取得が可能です。また、オーガニック検索結果における各広告の掲載順位を含む広告リストも個別に収集されます。このスクレイパーでは、結果のソート順の指定や、受け取り場所(ピックアップポイント)の指定も可能です。
A-Parserの機能により、スクレイピング設定を保存して後で再利用したり(プリセット)、スクレイピングのスケジュールを設定したりすることが可能です。自動クエリ増殖、ファイルからのサブクエリの挿入、英数字の組み合わせやリストの総当たりを使用して、可能な限り多くの結果を取得できます。
収集データ

- 商品数
- 商品名
- 商品リンク
- 商品画像
- ブランド
- 価格および旧価格
- 評価およびレビュー数
- サイズおよび/または色
- 広告の場合 - 商品リスト内での掲載順位
- 「関連検索」および「おすすめ」のキーワードリスト
ユースケース
- 商品リンクの収集
- 商品の人気度の評価
- 価格動向と人気の追跡
- 商品画像アセットの収集
- 広告の掲載順位の特定
クエリ
クエリとして以下を使用できます:
ブランドの商品リストへのリンク(例):
https://www.wildberries.ru/brands/kristiano-fashion
https://www.wildberries.ru/brands/s-a-s
カテゴリー内の商品リストへのリンク(例):
https://www.wildberries.ru/catalog/elektronika/razvlecheniya-i-gadzhety/igrovye-konsoli/playstation
https://www.wildberries.ru/catalog/avtotovary/shiny-i-diski/shiny
Wildberriesの検索フォームに直接入力する場合と同じキーワード(例):
xiaomi mi10
Tシャツとタンクトップ
カーステレオ
クエリの置換
キーワードをクエリとして使用する場合、通常の検索結果よりも多くの結果を取得する必要があるときなどに、クエリを増殖させるための組み込みマクロを使用できます。
例えば、上記のキーワードに対してクエリ形式で a から zzzz までの文字の総当たりを指定すると、検索結果を最大限にローテーションさせ、多くの新しいユニークな結果を取得できます。
$query {az:a:zzzz}
このマクロは、元の検索クエリごとに 475254 個の追加クエリを作成します。合計で 4 x 475254 = 1901016 個の検索クエリになります。これは膨大な数字ですが、A-Parserにとっては全く問題ありません。分間 2000 クエリの速度であれば、このタスクは約 16 時間で完了します。
結果の出力例
A-Parserは、組み込みのテンプレートエンジン Template Toolkit により柔軟な結果のフォーマットをサポートしており、任意の形式や、CSVやJSONなどの構造化された形式で結果を出力できます。
ブランド、名称、価格の出力
結果のフォーマット:
$items.format('$brand, $name, $price\n')
結果の例:
Xiaomi, スマートフォン Poco X3 Pro / 6.67'' / 2400x1080 / IPS / 8 GB / 256 GB / 5160 mAh, 23751
Realme, スマートフォン realme 8 / 6.4'' / 2400x1080 / Super AMOLED / 6 GB / 128 GB / 5000 mAh, 19911
Apple, スマートフォン iPhone 11 128GB / 6.1'' / 1792x828 / Liquid Retina HD / 128 GB, 54990
Apple, スマートフォン iPhone 12 128GB / 6.1'' / 2532x1170 / OLED / 128 GB, 69990
Samsung, スマートフォン Galaxy A32 / 6.4'' / 2400x1080 / Super AMOLED / 4 GB / 128 GB / 5000 mAh, 19791
変数名付きの出力
結果のフォーマット:
$items.format('ブランド: $brand, 名称: $name, 価格: $price\n')
結果の例:
ブランド: Samsung, 名称: スマートフォン Galaxy A32 / 6.4'' / 2400x1080 / Super AMOLED / 4 GB / 128 GB / 5000 mAh, 価格: 19791
ブランド: Realme, 名称: スマートフォン realme 8 / 6.4'' / 2400x1080 / Super AMOLED / 6 GB / 128 GB / 5000 mAh, 価格: 19911
ブランド: Honor, 名称: スマートフォン Honor 50 / 6.57'' / 2340x1080 / OLED / 6 GB / 128 GB / 4300 mAh, 価格: 31490
ブランド: Apple, 名称: スマートフォン iPhone 13 256GB / 6.1'' / 2532x1170 / OLED / 256 GB, 価格: 89990
ブランド: Xiaomi, 名称: スマートフォン 6.53'' / 1600x720 / 2 GB / 32 GB / 5000 mAh, 価格: 8990
スクレイピング日時を含めたCSVテーブルへの出力
結果のフォーマット:
[% USE d = date(format = '%Y %m %d %H:%M', locale = 'C');
FOREACH item IN items;
tools.CSVline(d.format(), item.name, item.price, item.link);
END %]
結果の例:
"2022 01 26 10:15","スマートフォン 6.53'' / 1600x720 / 2 GB / 32 GB / 5000 mAh",8990,https://www.wildberries.ru/catalog/13615126/detail.aspx
"2022 01 26 10:15","スマートフォン iPhone 13 128GB / 6.1'' / 2532x1170 / OLED / 128 GB",74390,https://www.wildberries.ru/catalog/40640907/detail.aspx
"2022 01 26 10:15","スマートフォン Galaxy S21 256GB / 6.2'' / Dynamic AMOLED / 8 GB / 256 GB / 4000 mAh",64791,https://www.wildberries.ru/catalog/18592983/detail.aspx
"2022 01 26 10:15","スマートフォン Galaxy M22 / 6.4'' / 720x1600 / Super AMOLED / 4 GB / 128 GB / 5000 mAh",17280,https://www.wildberries.ru/catalog/41501725/detail.aspx
商品名、価格、割引率のCSVテーブルへの出力
結果のフォーマット:
[% USE Math;
FOREACH item IN items;
discount = item.oldPrice ? (item.oldPrice - item.price) / item.oldPrice * 100 : 0;
tools.CSVline(item.name, item.price, Math.int(discount + 0.5) _ '%');
END %]
結果の例:
"スマートフォン Poco X3 Pro / 6.67'' / 2400x1080 / IPS / 8 GB / 256 GB / 5160 mAh",23751,12%
"スマートフォン realme 8 / 6.4'' / 2400x1080 / Super AMOLED / 6 GB / 128 GB / 5000 mAh",19911,17%
"スマートフォン iPhone 12 128GB / 6.1'' / 2532x1170 / OLED / 128 GB",69990,0%
"スマートフォン Galaxy A32 / 6.4'' / 2400x1080 / Super AMOLED / 4 GB / 128 GB / 5000 mAh",19791,10%
"スマートフォン galaxy a52 / 6.5'' / 1080x2400 / Super AMOLED / 8 GB / 256 GB / 4500 mAh",28691,18%
CSVテーブルへの出力
結果のフォーマット:
[% FOREACH item IN items;
tools.CSVline(item.link, item.name, item.price, item.oldPrice, item.rating, item.reviews);
END %]
開始テキスト:
商品リンク, 商品名, 価格, 旧価格, 評価, レビュー数
結果の例:
商品リンク, 商品名, 価格, 旧価格, 評価, レビュー数
https://www.wildberries.ru/catalog/54067214/detail.aspx,"レディース ビーニーハット",703,1900,5,6
https://www.wildberries.ru/catalog/41415461/detail.aspx,"レディース ビーニーハット / 折り返し付きビーニー / ビーニー (beanie)",1487,1750,5,346
https://www.wildberries.ru/catalog/16782596/detail.aspx,"レディース ビーニーハット / 折り返し付きビーニー / ビーニー (beanie)",1487,1750,5,346
https://www.wildberries.ru/catalog/9468600/detail.aspx,"スカーフ付き帽子 / 手袋付き / レディース ビーニー",2700,4500,5,137
https://www.wildberries.ru/catalog/4750212/detail.aspx,"ベレー帽",765,1075,5,349
https://www.wildberries.ru/catalog/9793364/detail.aspx,"スカーフ付きベレー帽",3297,4710,5,307
SQL形式での保存
結果のフォーマット:
[% FOREACH item IN items;
"INSERT INTO products VALUES('" _ item.name _ "', '"; item.link _ "', '"; item.price _ "', '"; item.brand _ "')\n";
END %]
結果の例:
INSERT INTO products VALUES('スマートフォン 6.53'' / 1600x720 / 2 GB / 32 GB / 5000 mAh', 'https://www.wildberries.ru/catalog/13615125/detail.aspx', '8990', 'Xiaomi')
INSERT INTO products VALUES('スマートフォン galaxy a52 / 6.5'' / 1080x2400 / Super AMOLED / 4 GB / 128 GB / 4500 mAh', 'https://www.wildberries.ru/catalog/23155682/detail.aspx', '24291', 'Samsung')
INSERT INTO products VALUES('スマートフォン 6.53'' / 1600x720 / 2 GB / 32 GB / 5000 mAh', 'https://www.wildberries.ru/catalog/13615126/detail.aspx', '8990', 'Xiaomi')
結果のJSONへのダンプ
共通結果形式:
[% IF notFirst;
",\n";
ELSE;
notFirst = 1;
END;
obj = {};
obj.query = query;
obj.items = [];
FOREACH item IN p1.items;
obj.items.push({
link = item.link
name = item.name
price = item.price
});
END;
obj.json %]
開始テキスト:
[
終了テキスト:
]
結果の例:
[
{
"query": "スマートフォン",
"items": [
{
"link": "https://www.wildberries.ru/catalog/27379808/detail.aspx",
"name": "スマートフォン realme 8 / 6.4'' / 2400x1080 / Super AMOLED / 6 GB / 128 GB / 5000 mAh",
"price": 19911
},
{
"link": "https://www.wildberries.ru/catalog/16023994/detail.aspx",
"name": "スマートフォン iPhone 11 128GB / 6.1'' / 1792x828 / Liquid Retina HD / 128 GB",
"price": 54990
},
{
"link": "https://www.wildberries.ru/catalog/15875669/detail.aspx",
"name": "スマートフォン iPhone 12 128GB / 6.1'' / 2532x1170 / OLED / 128 GB",
"price": 69990
},
...
]
},
...
]
「Prepend text」および「Append text」オプションをタスクエディタで利用できるようにするには、「More options」を有効にする必要があります。
利用可能な設定
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
| Pages count | 5 | スクレイピングするページ数 |
| Sort by | Popularity | 結果のソート順 |
| Address | 受け取り場所の住所 | |
| Longitude | 受け取り場所の経度 | |
| Latitude | 受け取り場所の緯度 |
デフォルトでは、Wildberriesはモスクワの結果を表示します。スクレイパーでは受け取り場所を指定することができ、結果リストは特定の場所に紐付けられます。これを行うには、Address、Longitude、Latitude の3つのパラメータを上書きする必要があります。これらのパラメータに必要な値はブラウザで取得できます。
1. デベロッパーツール(ChromeではF12キー)をあらかじめ開いた状態で、目的の受け取り場所を選択します

2. 「ネットワーク」タブでリクエスト create?version=1 を探し、データをスクレイパーの設定にコピーします
受け取り場所を選択した後、ネットワーク(英語では Network)タブを開きます。create?version=1 というリクエストを探し、そのレスポンス(Preview)から address、lat、lon をそれぞれスクレイパーの Address、Latitude、Longitude フィールドにコピーします。
