0

私は今、 "スクレイピングの問題"に固執しています。特に、私はウェブページからGoogleスプレッドシートに著者の名前を抽出したい。実際にはfunction = IMPORTXML(A2、 "// span [@ class = 'author vcard meta-item']")は動作していますが、スクレイプするリンクの量を増やしても無限にロードされ始めます。GoogleのスプレッドシートでImportXMLの制限を超過するには

私は調査したところ、この問題はgoogleの限界があるという事実のためです。

私は「簡単にコピーできますか」という制限またはスクリプトを超えることを知っている人はいますか? - 私は本当にコーディングの馬鹿を持っていない。

+0

[尋ねる]にチェックアウトしてください。 –

答えて

0

制限を超えるスクリプトはありません。コードはGoogleマシン(サーバー)上で実行されるため、あなたは不正行為をすることはできません。 いくつかの制限はスプレッドシートにバインドされているため、複数のスプレッドシートを使用すると効果的です。

+0

ありがとう、thats良いアイデアだが、問題はist、私は正確な制限を知っていないデータを別のスプレッドシートに分割する。 importxml関数は、?spanクラスを抽出するまでにも非常に時間がかかりますか?を探しています。 – rookie4

1

私はIMPORTXMLのすべての限界を克服するカスタムインポート関数を作成しました。これは約800個のセルでこれを使用しています。

Google Sheetのカスタムスクリプト(ツール>スクリプトエディタ...)を使用し、xpathの代わりにregexを使用してコンテンツを検索します。

function importRegex(url, regexInput) { 
    var output = ''; 
    var fetchedUrl = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); 
    if (fetchedUrl) { 
    var html = fetchedUrl.getContentText(); 
    if (html.length && regexInput.length) { 
     output = html.match(new RegExp(regexInput, 'i'))[1]; 
    } 
    } 
    // Grace period to not overload 
    Utilities.sleep(1000); 
    return unescapeHTML(output); 
} 

この機能は、どのような機能と同様に使用できます。もちろん

=importRegex("https://example.com", "<title>(.*)<\/title>")

、あなたはまた、セルを参照することができます。

=importRegex(A2, "<title>(.*)<\/title>")

あなたは出力にHTMLエンティティを表示したくない場合は、この機能を使用することができます。

すべて一緒に
var htmlEntities = { 
    nbsp: ' ', 
    cent: '¢', 
    pound: '£', 
    yen: '¥', 
    euro: '€', 
    copy: '©', 
    reg: '®', 
    lt: '<', 
    gt: '>', 
    mdash: '–', 
    ndash: '-', 
    quot: '"', 
    amp: '&', 
    apos: '\'' 
}; 

function unescapeHTML(str) { 
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) { 
     var match; 

     if (entityCode in htmlEntities) { 
      return htmlEntities[entityCode]; 
     } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { 
      return String.fromCharCode(parseInt(match[1], 16)); 
     } else if (match = entityCode.match(/^#(\d+)$/)) { 
      return String.fromCharCode(~~match[1]); 
     } else { 
      return entity; 
     } 
    }); 
}; 

...

function importRegex(url, regexInput) { 
    var output = ''; 
    var fetchedUrl = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); 
    if (fetchedUrl) { 
    var html = fetchedUrl.getContentText(); 
    if (html.length && regexInput.length) { 
     output = html.match(new RegExp(regexInput, 'i'))[1]; 
    } 
    } 
    // Grace period to not overload 
    Utilities.sleep(1000); 
    return unescapeHTML(output); 
} 

var htmlEntities = { 
    nbsp: ' ', 
    cent: '¢', 
    pound: '£', 
    yen: '¥', 
    euro: '€', 
    copy: '©', 
    reg: '®', 
    lt: '<', 
    gt: '>', 
    mdash: '–', 
    ndash: '-', 
    quot: '"', 
    amp: '&', 
    apos: '\'' 
}; 

function unescapeHTML(str) { 
    return str.replace(/\&([^;]+);/g, function (entity, entityCode) { 
     var match; 

     if (entityCode in htmlEntities) { 
      return htmlEntities[entityCode]; 
     } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) { 
      return String.fromCharCode(parseInt(match[1], 16)); 
     } else if (match = entityCode.match(/^#(\d+)$/)) { 
      return String.fromCharCode(~~match[1]); 
     } else { 
      return entity; 
     } 
    }); 
}; 
関連する問題