アマゾンのセール情報からASINを取得
以前とは違ってアマゾンのセール情報からASINを取得してみよう。セール情報から取得する場合はアマゾンが作ったセール用のnode番号が必要になる。
sync-requestとjsdomを使っていたが、今回はrequestとjsdomを使う。
Amazonの検索結果からasinをスクレイピング
https://qiita.com/99nyorituryo/items/c5d53a3ca8a4967b5927
ASINの取得
例として、「秋のKADOKAWAコミック&ラノベ フェア」のアドレスからASINをとる。
https://www.amazon.co.jp/b?ie=UTF8&node=8420570051
上のページを開いてからkindle本、ページ2を選ぶ。なぜそうするかというと、ページ番号を可変させて、一括でASINを取得したいから。
下のアドレスから、page=2を探して2の部分を入れ替えながら、requestで取得する。
jsdomやrequestをインストールする。
npm install jsdom
npm i request
ページからjsdomでasinを配列として出力している。1ページあたり16冊まで表示する。
constrequest=require("request");constjsdom=require("jsdom");const{JSDOM}=jsdom;fs=require('fs');functionasinGet(html){constdom=newJSDOM(html);table=dom.window.document.querySelectorAll("h2.a-size-mini > a")asin=[]//配列宣言for(leti=0;i<table.length;i++){asin[i]=table[i].hrefasin[i]=asin[i].replace(/^.+dp\/(\w+)\/.+$/g,'$1')}/*
ul class="a-pagination" li class="a-disabled a-last"
*/if(dom.window.document.querySelectorAll("ul.a-pagination > li").length!==0){li=dom.window.document.querySelectorAll("ul.a-pagination > li")flag=li[li.length-1].getElementsByTagName('a').length}else{flag=0}console.log(asin)console.log(flag)returnasin}functionsleep(second){returnnewPromise(resolve=>{setTimeout(()=>{resolve()},second*1000)})}functionrequestPromise(param){returnnewPromise((resolve,reject)=>{request(param,function(error,response,body){if(error){reject("ページを取得できませんでした");}else{// console.log(body);asin=asinGet(body)asinarray=asinarray.concat(asin)resolve("取得できました");}})})}(asyncfunction(){day='秋のKADOKAWA'flag=1asinarray=[]filename=day+'k.json'//https://www.amazon.co.jp/s?rh=n%3A2250738051%2Cn%3A%212275265051%2Cn%3A%212275277051%2Cn%3A%218172192051%2Cn%3A%218187544051%2Cn%3A%218187545051%2Cn%3A%218187561051%2Cn%3A8187562051&page=2&qid=1594419906&ref=lp_8187562051_pg_2//&price=100-10000//'+i+'loop1:for(leti=1;i<=500;i++){varurl='https://www.amazon.co.jp/s?i=digital-text&bbn=8420570051&rh=n%3A2250738051%2Cn%3A2275265051%2Cn%3A2275277051%2Cn%3A8172192051%2Cn%3A8419007051%2Cn%3A8420502051%2Cn%3A8420569051%2Cn%3A8420570051%2Cn%3A2275256051&dc&page='+i+'&fst=as%3Aoff&qid=1600614637&rnid=2250739051&ref=sr_pg_2'if(flag==0){breakloop1;}awaitsleep(3)awaitrequestPromise(url);console.log(i)}console.log(asinarray)if(asinarray.length==0){}else{console.log('ファイルを書き込みます')fs.writeFileSync(__dirname+'/json/kindle_sale/asin/'+filename,JSON.stringify(asinarray,null,1),'utf-8')}})();console.log("リクエスト開始");
取得したASINは次のリンクで説明するようにPA-APIでアフィリエイトサイトの情報やリンクを生成する。
PA-API v5でAmazonの商品情報を取得する
https://qiita.com/99nyorituryo/items/e337e6a75c361521f297
このASINを利用して実際のセールのページを作りました。
https://kyukyunyorituryo.github.io/kindle_sale/