web-dev-qa-db-ja.com

GoogleスプレッドシートのIMPORTDATA、IMPORTFEED、IMPORTHTML、またはIMPORTXML関数がWebサイトでホストされているリソースからデータを取得できるかどうかを知る方法

Googleスプレッドシートにはいくつかのインポート機能があります

  • インポートデータ
  • インポート
  • IMPORTHTML
  • IMPORTXML

上記の関数は#N/A Imported content is emptyなどのエラーを返すことがあり、インポートするリソースコンテンツに問題がないことを確認したい場合があります。

これらの関数が、インポートしたいコンテンツを取得できるかどうかを知るにはどうすればよいですか?

IMPORTRANGEも存在することは知っていますが、その機能はGoogleスプレッドシートのスプレッドシートからのみコンテンツをインポートできます

1
Rubén

IMPORTDATA、IMPORTFEED、IMPORTHTML、およびIMPORTXMLは、次のWebサイトでホストされているリソースからコンテンツを取得できます。

  • 公開されています。これは、リソースにアクセスするために、サービスが認証/ログインする必要がないことを意味します。
  • コンテンツは「静的」です。つまり、最新のWebブラウザのソースコードの表示オプションを使用してリソースを開くと、プレーンテキストとして表示されます。
    • 注:Chromeの検査ツールには、解析されたDOMが表示されます。他の作品では、JavaScriptコードまたはブラウザ拡張機能/プラグインによって動的に変更される可能性のあるWebページの実際の構造/コンテンツ。
  • コンテンツは適切な構造を持っています。
    • IMPORTDATAは、csvまたはtsvはリソースのファイル拡張子に関係ないため、構造化されたコンテンツを処理します。
    • IMPORTFEEDは、マークアップされたコンテンツをATOM/RSSとして機能します
    • IMPORTHTMLは、マークアップされたコンテンツを、適切にマークアップされたリストまたはテーブルを含むHTMLとして機能します。
    • IMPORTXMLは、マークアップされたコンテンツをXMLまたはXHTMLなどのそのバリアントとしてマークアップします。

On W3C Markup Validator チェックアウトするためのいくつかのツールがあり、リソースが適切にマークアップされていました。

CSVチェックアウトについて CSVファイルを検証する既知のサービスはありますか

スプレッドシートは

  • インポートされたコンテンツのための十分なスペースが必要です。 Googleスプレッドシートには、スプレッドシートごとに500万セルの制限があります。 この投稿 18278の列制限、および値や数式でもセルコンテンツとして5万文字です。
  • 大量のセル内コンテンツを適切に処理しません。 「制限」はユーザーの画面サイズと解像度に依存します。これは、ズームイン/ズームアウトが可能になったためです。
2
Rubén

(おそらく答えではないかもしれませんが、ここでは簡単な謙虚なスクレイピングガイドです)

  • すべては、ウェブサイトのJavaScriptを無効にして、残っているものと破棄できるものを確認することから始まります
  • 最初の選択肢は常にIMPORTHTMLで、ゆっくりと(1行1列)下にドラッグします
    =IMPORTHTML("URL"; "TABLE"; ROW(A1)-1)
  • それが失敗した場合、それを繰り返します:
    =IMPORTHTML("URL"; "LIST"; ROW(A1)-1)
  • それも失敗する場合は、IMPORTXMLに切り替えます。
    =IMPORTXML("URL"; "//*")
  • これが#N/A以外の何かを返す場合、XPathで絞り込むか、再実行/クエリアウトできます。それでもうまくいかない場合は、パブリックURL(存在する場合)の代わりにAPI呼び出しまたはJSONデータを使用する可能性があります
    =IMPORTXML("URL"; "//div[@class='primary']")
  • IMPORTXMLがJSONを取得できない場合、カスタムIMPORTJSON関数がありますGitHub
  • 最後の手段として、IMPORTDATAがあり、次のようなソースコードからのものをスクレイピングします:
    =ARRAY_CONSTRAIN(IMPORTDATA("URL"); 8000; 20)
    =REGEXEXTRACT(QUERY(ARRAY_CONSTRAIN(IMPORTDATA("URL"); 3000; 2); 
     "where Col1 contains 'meta table id something'"); "\>(.+)\<")
  • そして、すべての試行の後、結果がまだ#N/Aである場合、放棄する可能性があり、スクレイプ可能な類似サイトを見つける時間が常にあります。

(言及されたテクニックのもう少しのRL例ここ

2
user0