実際の Vistaprint の行を返した2回の実行では、price、parsed_price、currency、availability のすべてが空でした。これはスクレイパーの不足ではありません。商品ページを取得して構造化データを読んでみてください。Product ブロックには商品名、説明、SKU、MPN、ブランドが入っていますが、オファーのノードはなく、価格はどこにもありません。Vistaprint は数量と仕上げによって見積もるため、ページにはセルに入れられる単一の数字が存在しないのです。
商品名、ブランド、SKU、評価、説明、画像URLは、実際の商品行すべてで値が入って返ってきました。Vistaprint の品目を自社のカタログと突き合わせ、どの商品が存在しどう説明されているかを追い、画像素材を取得するには十分です。価格比較を組み立てるには足りない、というだけです。
両方向の証拠があります。商品URLは完全な行を返しました。その一つ上のカテゴリーページは no product data found を返し、/search?q=… のURLは status: ok を返したものの name が「Search Results」で他のすべての項目は空でした。商品ではなくページタイトルです。Vistaprint 自身の robots.txt も、すべてのクローラーに対して /search を禁止しています。
手元の8回の実行のうち、3回が blocked (needs residential proxy) で返りました。そのうち1回は、8日後に成功したのと同じ名刺ページのURLでした。つまりブロックは実在し、かつ断続的です。8回の実行から成功率を提示するつもりはありませんし、どのようなスケジュールにも再試行を組み込むべきです。
image と images は実際の2行とも同じ値を持っており、その値は Cloudinary の変換URLです。c_scale,dpr_auto,f_auto,q_auto:best といった具合です。カンマはURLの一部です。そこで分割すると、どこにも解決しない断片ができます。2行のうち1行は1,697文字の画像URLを持っていたので、列には余裕を持たせてください。
最後の列は status で、サイトではなく当社のエクスポーターが書き込みます。8回の実行を通じて4種類の値をとりました。ok、blocked (needs residential proxy)、no product data found、http 404 です。失敗した行も理由を持って必ず届きます。
実際のエクスポートのヘッダー行から、シートの順序どおりに読み取ったものです。値が入っていることを確認できた列は、その値がどのようなものだったかを記しています。すべての行で空だった列は、そのことを記しています。
url と完全に一致していました。sku と同一で、PRD- に英数字8文字が続く形式でした。識別子の列が2つで値は1つ - どちらを使ってもかまいませんが、結合するなら両方を確認してください。このスキーマ系統では独立に埋まるためです。url を使ってください。image と同一でした。カンマで分割しないでください - カンマは Cloudinary の変換の一部です。sku_code と同一で、レコード中で最も有用な結合キーです。ページの構造化データが自らの SKU として公開している値そのものです。query と等しく、これらのリクエストがリダイレクトなしで処理されたことが分かります。cms.cloudinary.vpsvc.com 上の Cloudinary URL が、rendering.documents.cimpress.io のレンダリング済みプレビューを包む形です。素材は写真として保存されているのではなく、リクエストごとに生成されます。当社の一つは1,697文字に達したので、固定幅の列では切り捨てられます。ok、blocked (needs residential proxy)、no product data found、http 404 です。行数ではなくこの列で突き合わせてください。1行あたり17列 · CSV・JSON・Excel の3形式
価格の4列が空である理由を、はっきり述べます。手元には8回の実行があり、そのうち2回が実際の Vistaprint の商品行を返しましたが、どちらでも price、parsed_price、currency、availability は空文字列でした。これはスクレイパーの欠陥ではありません。この2つの商品ページを直接取得すると、745〜843 KB ほどのサーバー側でレンダリングされた HTML が返り、その ld+json には商品名、説明、SKU、MPN、ブランドを持つ Product ブロックが含まれています。そしてオファーのノードはなく、いかなる価格もありません。Vistaprint は数量、素材、仕上げによって見積もるため、ページが公開できる、あるいは当社が読み取れる単一の商品価格が存在しないのです。同じ構造化データにある評価と SKU は当社のエクスポートと完全に一致しており、これらの行が解析ミスではなく本物であると分かるのはそのためです。Vistaprint の価格が必要な業務であれば、このサービスはそれを提供しませんし、どのような設定でも変わりません。
sku はきれいな PRD- 形式で届き、商品ページが自らの SKU として公開している値と同じなので、信頼できる結合キーになります。name や brand と組み合わせれば、Vistaprint の品目リストを自社のものと、文章での照合なしに突き合わせられます。
商品URLのセットを定期的に実行し、name、description、rating を実行日とともに保存します。商品は誰かが告知するよりもずっと頻繁に改名され、位置づけを変え、説明を書き換えられます。その系列がそれを示してくれます。
description と image は値が入って返ります。画像は保存された写真ではなく Cloudinary のライブレンダリングなので、URLを成果物として扱い、ファイルが必要になった時点で取得してください。
rating は確実に届く項目の一つです。文字列なので、まず変換してください。reviews は空で返ることを忘れずに。母数の分からないスコアだけが手元にある状態です。推移を見るには十分ですが、商品同士を順位づけするには足りません。
LIVESCRAPER10 をご利用ください。同じ17列のスキーマを卸カタログに向けたもの。対照として有益です。あちらのサイトは JavaScript で描画されますが、こちらは違います。
同じ形を百貨店に向けたもの。こちらでは価格の列に実際に入れる中身があります。
行の隣に置く、日付入りのページ画像。ここでは価値があります。Vistaprint の価格は、どの列にも収まらない対話式の数量セレクターの中にあるからです。
カタログの一巡で浮かび上がる印刷会社や販売店の、登録情報と DNS の事実。
一般に公開されているページ上の商品情報は、ごく普通の競合情報です。ここで挙げておくべき注意点は、どのページを要求するかと、画像素材をどう扱うかにあります。
商品名、ブランド、SKU、評価は、販売されている品物についての事実です。どの訪問者にも配信されるページからそれを読み取ることは、バイヤーが手作業でしていることを実用的な速度で行うのと同じ行為です。17列のどこにも個人を表す情報はありません。氏名も、メールアドレスも、電話番号も、アカウントもないため、個人情報を扱うサービスで問題になるデータ保護の論点は、ここでは生じません。
このサイトに固有の注意点が2つあります。1つ目は、どのページを要求するかです。Vistaprint の robots.txt には一般のクローラー向けの包括的な Disallow: / はなく、当社が確認した商品パスも禁止されていません。ただし /search はすべてのエージェントに対して禁止されています。これが重要なのは、このサービスの公開されている入力例に検索URLが含まれており、当社自身の実行の一つもそれを送信したからです。いずれにせよページタイトルだけで商品は返りませんでしたので、助言と礼儀は同じ方向を指しています。商品URLを送信してください。2つ目は画像素材です。画像の項目は Vistaprint 自身の仕組みが生成したプレビューに解決され、そのレンダリングも隣にある説明文も、誰かの著作物です。カタログの突き合わせ、補完、監視のために社内で使うことは一般的な実務ですが、自社のものとして公開するのは別の問いであり、答えも別です。
当社の条件は、ここにある他のサービスと同じです。一般に公開されているページのみ、ログインの先には入らず、データ層に第三者のトラッカーは置かず、エクスポートは30日後に自動削除されます。最初の500行は無料で、クレジットカードは不要です。
price、parsed_price、currency、availability は空でした。理由は情報源の側にあります。Vistaprint の商品ページを取得すると、その構造化データには商品名、説明、SKU、MPN、ブランドを持つ Product ブロックがありますが、オファーのノードはなく、価格もまったくありません。Vistaprint は数量と仕上げで見積もるため、ページに単一の価格が存在しないのです。どの設定でもこれは変わりません。query、name、brand、sku、sku_code、rating、url、description、image、images、status。すべての行で空だった6列は、price、parsed_price、currency、availability、reviews、product_url です。query、sku_code、product_url、name、description、parsed_price、price、currency、availability、rating、reviews、images、brand、sku、url、image、status。送信した商品ページごとに1行です。no product data found を返し、/search?q=… のURLは status: ok を返したものの name が「Search Results」で他のすべての項目は空でした。Vistaprint の robots.txt も、すべてのクローラーに対して /search を禁止しています。商品URLを送信してください。blocked (needs residential proxy) で返り、そのうち1回は8日後に成功したのと同じURLでした。8回は成功率を示すにはあまりに小さい標本なので提示しませんが、すんなり通ると想定せず、再試行を見込んでおいてください。PRD- に英数字8文字、画像は Cloudinary のURLが1つです。このスキーマは、両者が異なる別のカタログとも共有されているため対を保っています。結合キーを決める前に両方を確認してください。ひとつ注意点があります。images には Cloudinary の変換に属するカンマが含まれるため、この項目をカンマで分割するとURLが壊れます。ok、blocked (needs residential proxy)、no product data found、http 404 です。失敗した行も理由を持って届くので、入力リストと突き合わせられます。Vistaprint は名刺、チラシ、サイン、ブランド入りの衣類やバッグといったカスタム印刷物・販促品を小規模事業者に販売しており、それを数量単位で売っています。この商売の仕組みは、スクレイピングの前に理解しておくべき最も重要なことです。商品ページが何を伝えられて何を伝えられないかを、これが決めているからです。名刺50枚、200枚、1,000枚、どの用紙か、どの仕上げか - これらはすべて、ひとつの商品に対する別々の価格です。したがってページに単一の価格はありません。
これは推測ではありません。このページの根拠となる実行のうち、実際の Vistaprint の行を返した2回はいずれも price、parsed_price、currency、availability が空で返っており、同じ2つの商品ページを直接取得すると理由が分かります。それぞれ745〜843 KB ほどのサーバー側でレンダリングされた HTML を返し - この系統の一部のカタログとは異なり、JavaScript の外枠ではありません - その ld+json には商品名、説明、SKU、MPN、ブランドを持つ Product ブロックがある一方で、オファーのノードはなく、価格はどこにもありません。その構造化データに公開されている評価と SKU は当社のエクスポートと完全に一致しており、これによって行が本物であること、そして空のセルが当社ではなく情報源のものであることが分かります。
返ってくるのは識別情報です。手元の実際の行では、17列のうち11列に値が入っていました。送信したURL、商品名、ブランド、識別子の2項目、評価、解決後のURL、説明、画像の2項目、そしてステータスです。識別子は PRD- に英数字8文字が続く形で届き、ページ自身の構造化データが SKU と呼んでいるものと一致するため、自社レコードに対する信頼できる結合キーになります。画像は保存された写真ではなく、リクエストごとにレンダリングされるプレビューを包む Cloudinary のURLで、当社の一つは1,697文字に達しました。固定幅の列なら切り捨てられる長さであり、変換の内部にカンマを含むため、この項目をカンマで分割するとURLが壊れます。
実務上の注意が2つあります。商品URLを送信してください。当社の実行では、カテゴリーページは no product data found を返し、検索URLは name が「Search Results」で他はすべて空の行を返しました。Vistaprint の robots.txt もすべてのクローラーに対して /search を禁止しているので、礼儀にかなう道と役に立つ道は一致しています。そして断続的なブロックを見込んでください。8回の実行のうち3回が blocked (needs residential proxy) を返し、その中には8日後に成功したURLも含まれます。8回は成功率を示すには小さすぎる標本なので提示しません。代わりに再試行を組み込んでください。一般に公開されているページのみ、データ層に第三者のトラッカーは置かず、エクスポートは30日後に自動削除されます。最初の500行は無料で、クレジットカードは不要です。