2018-09-06Amazonで物販をしていると、いろんなwebサイトからデータを取得したいということがあります。商品の情報・データとか。Amazonなら価格や出品者数モノレートならランキング変動回数など。APIやPA-APIといった、AmazonのAPIを利用することで効率よく、かつ、webサイトの正面玄関から堂々とデータを取得することができます。AmazonのAPIだけでは取得できないデータもたくさんあります。セラーIDをもとにした扱っている商品の一覧など。いった場合にはAPIを使うのではなく、webスクレイピングという技術を使うことになります。webスクレイピングってなに?最小限のブラウザ機能を持たせたプログラムを使ってwebサイトのデータを取得するもの。ブラウザ機能といってもHTTP通信のリクエストを送る程度。このwebスクレイピング、今回わけあって本腰入れてかなり調査・検証をしておりました。今回はこの先、誰かがAmazonを使った物販でwebスクレイピングしたい、という人に向けて、わたしがハマった点について書き残しておきます。webスクレイピング・クローリングするならブラウザを取り込むかHTTP通信をトレースするwebスクレイピング・クローリングのプログラムの種類webスクレイピング・クローリングの方法としては、大きく分けて3種類あります。概要からご紹介します。ExplorerExcelAccessなどなど。Wordとかも全部そうですが、列挙すると大変なので主にOLE機能が使われる傾向のあるアプリケーションを列挙しました。わたしがよくやる・好んで使うのはIEのOLEを使ったものです。プログラムがIEを遠隔操作し、IEが取得したデータを解析するというタイプ。前まではこれで十分でしたし、わたしのPC環境でもこれで十分です。実際にプログラムを色んな人に使ってもらった結果、環境に依存する問題がチラホラ挙がってきました。orzどういう問題かというと、プログラムが生成したIEのコントローラ的なものを見失う。(実行中にIEオブジェクトのインスタンスが消失する)IEのコントローラ的なものを終了させても、終了できない。IEの最新バージョンでは1つのタブでwebページを遷移していても、内部的には別ウィンドウとして扱われることがあるようです。これはセキュリティに関するものであるという意見がweb上の情報ではよく見かけられますが、どうがんばっても対処不能。OLEはVBスクリプトでも使えるのでかなり重宝していたのですが...。VBスクリプトはコンパイル環境不要で手軽に書けてすぐ動かせるプログラムだったので好きだったのですけどねぇ。seleniumを使ったプログラムブラウザの遠隔操作プログラムとして有名なのがseleniumというものです。seleniumってなに?一言で言うと『ブラウザドライバ』。ブラウザを操作するためのドライバであり、これを使うことでさまざまなブラウザを遠隔操作することができる。Chrome、これらも遠隔操作ができるものです。こいつについて調査して使ってみたのですが...。seleniumはOLE以上に、環境に強く依存するどう依存するかというと、ブラウザのバージョンです。FirefoxやChromeブラウザに更新が入る度に、seleniumも最新版にアップデートしたりする必要が出てきそうだと判断しました。場合によってはダウングレードも必要でしょう。あまりにもめんどくさすぎます。seleniumはあくまでもweb系のエンジニアがテストするために用いるもの、といった感じですね。ブラウザをプログラム内部に埋め込んだwebスクレイピング・クローリングC#やVBAにもあるのですが、ブラウザをプログラム内に埋め込むためのライブラリが用意されています。WebBrowserクラスちょっとこいつを使ってみました。...しかし、こいつも結構クセがあることがわかりました。orzどうやらWebBrowserクラスにはもともとバグがあるようです。メモリが解放されないというスーパー致命的な不具合です。長時間使っているとメモリを食いつぶしてアプリが落ちます。ハード的なメモリを全部を食い尽くすのではなく、WebBrowserクラスが使えるメモリの総量が決まっているようです。...おま、これ、全く使い物にならないじゃないかと思いつつも、こいつをどうやってうまく使っていくか、ということを考えていました。結果、WebBrowserクラスを使ってwebスクレイピング・クローリングをやる場合には、専用の別アプリにしておくという結論になりました。メモリ解放漏れという致命的不具合があっても、アプリケーション自体を終了させればメモリ解放漏れも解消できますからね。WebBrowserクラスを使ったアプリを、こまめに起動・終了を繰り返す制御アプリを別に作る。webサイトAからデータを取得したいとして、『webサイトAから10ページ分のデータを取得する』というプログラムを『100回繰り返す』という制御アプリを作る、というイメージです。おかげさまでデバッグが大変です。HTTP通信をトレースしたwebスクレイピング・クローリングここまで説明してきたことは、どちらかというとwebスクレイピングではなくクローリングと呼ぶのが適切でしょう。webスクレイピングというのは、最小限のHTTP通信のみを行うプログラム・その行為を指すとわたしは認識しています。C#ならHttpClientクラスを使ったものです。webスクレイピングなんて簡単だぜ!プログラムのド素人だけどwebスクレイピングツール作ってみた!...とかいう意見をネット上でたまに見かけますが、わたしとしましては『ちょっと待った!』と言いたいところだったりします。webスクレイピングというのは、単純にwebサイトからデータをダウンロードすれば良い、というだけのものではないと思っているからです。わたしがこういったツールを避けてきたのには理由があります。これはWireSharkというパケット解析ツールを使った結果です。』というドラマでも登場したツールだったりします。使い手によって善にも悪にもなるツールです。HTTP通信をトレースするということは、ざっくり言ってしまえばインターネット通信プロトコルを理解し、実際に通信したログをプログラムを使って再現させるようなもの。webサイトによりますが、完璧にトレースできなければアクセスブロックされる可能性があります。これはちょっと大変...。わたしは好んでブラウザを遠隔操作するようなプログラムを作っていました。ぶっちゃけ、WireSharkをしっかり使いこなせるエンジニアっていうのは上位35%程度だと思ってます。(ちなみにわたしはたいしたことないエンジニアですがネットワーク関係の仕事しているので知っているだけです。)よくわからない人には、こうやって画像にモザイクかけることすらできないはずです。ゆえに、webスクレイピング系のツールを本当の意味でしっかり作るというのは難易度が高い部類です。API使うプログラムのほうが10倍は簡単ですね。ブラウザを操作する系のwebスクレイピング・クローリングの良いところブラウザを遠隔操作したり、埋め込んだプログラムのメリットとしましては、上述したようなHTTP通信を考える必要がないことです。webサイト側からすればアクセスしてきたのがwebスクレイピング・クローリングツールには見えず、人間がブラウザを操作してアクセスしてきたようにしか見えないんですよね。webサイトによっては1日にアクセスできる回数が決まっていたりもするようですし、バレないから大丈夫といって過度なアクセスをしてサーバに負荷を与えるのはよろしくないです。ありがたいのが、ブラウザの機能を使うのでDOM操作ができることです。DOM操作とは、たとえばブラウザ上のボタンを押したりjavascriptを実行させたり、webページを編集したり。ブラウザを操作する系のwebスクレイピング・クローリングの問題点わたしは好んでブラウザを操作するタイプのwebスクレイピング・クローリングを作ったりしましたが、問題点がいくつかあります。ブラウザ・環境に依存するwebページの遷移(ページ送りなど)でコケる環境依存が強いというのが一番の問題ですね。セキュリティ関係やブラウザのバージョンなど、完璧なプログラムを書くのは実質不可能です。あとから問題が出て来る、ということもあります。WindowsのアップデートにひもづいてIEがアップデートされたり、とか。作り込んでも、環境しだいでブラウザ自身がwebページの遷移にコケることもあります。データを取りこぼしただけでも、プログラム的にはうまく解析できなくなってしまったり。OLEはオワコンseleniumは開発者向けWebBrowserクラスはバグありWebBrowserクラス使うならこまめに起動・終了を繰り返す制御アプリ必須HttpClientクラス使うならHTTP通信はトレースしたほうが良さげ開発者のたしなみ。インターネッツプロトコルは理解した上でWireShark使おうねわたしの本業はアプリ屋さんではなく、ネット屋さん?ファーム屋さん?ちょっと曖昧ですが、インフラ周り?なエンジニアです。わかっている人はこういったことにすらハマらないことでしょう。結論としては、webスクレイピングやるなら、最終的にたどり着くのはやはりHttpClientを使ったタイプのものでしょうね。ここは避けて通れなさそうです。勉強したいと思います。Amazonをwebスクレイピングするサンプルプログラムを価格改定ツールのプライスター・マカドの特典として公開しています。よければご検討ください。自作ツールと輸入ビジネス[特典限定]悪用厳禁!セラーからASINを全てぶっこ抜く、書けば動くサンプルソース...http://amznlog.com/get-seller-asin-sample下記に移動しました。自作ツールと輸入ビジネス[輸入ビジネス特化]忙しいあなたの代わりに仕事する。マカドお申込みの特典についてhttp://amznlog.com/page本ページでは、当ブログ経由でマカドをお申込みいただいた際の『自作ツールと輸入ビジネス』オリジナル特典についてご説明します。マカドをご利用の方でも、一度退会し、当ブログ経由で再度お申込みいただくことで特典を受けられます。APIを使ってカートボックス価格を取得してみよう!ということをご説明させていただきました。Amazonのすべてにカートボックス価格が設定されているわけではありません。今回の記事は開発者向けの方7割、一般セラーの方3割な記事です。APIを利用することでAmazonにおける販売手数料を取得することができます。APIを使ったツールを作成・公開しています。APIを使ったプログラミングのやり方・作り方を公開します。APIを使ってASINと価格をもとに販売手数料を取得する方法Amazonで物販をするとなると、商品のリサーチをして仕入れ金額がいくらになるか、ということを計算しますよね。いつも計算が大変なのがAmazonの販売手数料です。本業でSE、副業で輸入ビジネスをやって月10~20万を稼ぎました。患い大腸全摘済みのハンデ持ちですがロードバイクで富士山登るのが好きです。詳しいプロフィールはコチラ。views[輸入ビジネス特化]忙しいあなたの代わりに仕事する。views輸入ビジネスと電気用品安全法とPSEマーク。views輸入ビジネスと電波法。ライセンスの個別販売・購入2016年6月より、プライスターはインフォトップのアフィリエイト広告撤退のため、当ブログの特典がプライスター購入では付与ができなくなりました。輸入ビジネスについて情報収集をしていると、かならず耳にするのがマカドというツールです。当ブログ経由でのマカド・プライスターのお申込み特典が人気です。...2018/03/04[輸入ビジネス特化]忙しいあなたの代わりに仕事する。マカドお申込みの特典について本ページでは、当ブログ経由でマカドをお申込みいただいた際の『自作ツールと輸入ビジネス』オリジナル特典についてご説明します。...2020/01/28輸入ビジネスで銃刀法違反だから輸入できないって?所持できないだけじゃない?銃刀法違反と聞いてどのようなことを思い浮かべるでしょうか?拳銃とか日本刀とか、そんなところではないでしょう。輸入ビジネスにおいて拳銃を輸入するなんていうことはまぁほぼありえないと思っています。...2020/01/17輸入ビジネスで独立はできるのか?独立リスクと安定社畜の天秤ブログ読者様による質問の回答シリーズです。多く寄せられる質問について回答してます。これもなかなか多いです。...2020/01/16会社の給料が30歳代で給料が手取り20万?家族4人で生活するためには?わたしの会社の年収は550万円程度。一般的なサラリーマンの平均年収という枠で見れば別に少ない方ではないでしょう。...2020/01/13SMSによる不正送金が流行中。輸入ビジネスでのセキュリティ対策は?SMSを使ったフィッシング詐欺が大流行しているようですね。...2020/01/09私が輸入ビジネスで何度も痛い目にあったこれは失敗っていうジャンルリサーチをして儲かると判断して仕入れた商品、なぜか毎回赤字になってしまう。そんなジャンルはありませんか。わたしはそういった経験を何度もしてきました。AFFINGER4.。