2017-02-01 16 views
0

Webページから特定の値を抽出してGoogleスプレッドシートに取り込もうとしています。問題は、値を簡単に引くことができるようにページが構造化されていないことです。Google Appスクリプトを使用してWebページの表から値を抽出する

以下のHTMLがあれば、誰でも "Prop Taxes"を含むTDエレメントから "$ 4,586"を引き出す方法を提案できますか?ページには「d97m50」のクラスを持つTDがたくさんあります。また、 "d97m2"のクラスを持つテーブルがたくさんあります。

私は以下を試しましたが、どちらかを動作させることができませんでした。最初の1つは、ページ上のTDを繰り返し処理する方法を特定できず、「税金を含む」の後にTDを見つけてそこからテキストだけを抽出することができませんでした。私は同じことをする正規表現を決定することができなかったので、2つ目は失敗しました。テーブルをプルする

<TABLE class="d97m2" cellSpacing=0 cellPadding=0 sizset="false" sizcache06358115873960983="276 82 150"> 
 
<!-- A bunch of other rows --> 
 
<TR> 
 
<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD> 
 
<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$4,586</span></TD> 
 
<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD> 
 
<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD> 
 
<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD> 
 
<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD> 
 
<TD class="d97m46"><span class="label">TOE:</SPAN></TD> 
 
<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR> 
 
<TR> 
 
<!-- a bunch more rows --> 
 
</TABLE>

答えて

0

HTMLを取得してJavascript Stringオブジェクトに処理したい場合は、RegExを使用して、後にある特定の文字列を識別できます。例えば

、あなたのテストテキスト与えられた:

<TABLE class="d97m2" cellSpacing=0 cellPadding=0 sizset="false"  sizcache06358115873960983="276 82 150"> 
<!-- A bunch of other rows --> 
<TR> 
<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD> 
<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$4,586</span></TD> 
<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD> 
<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD> 
<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD> 
<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD> 
<TD class="d97m46"><span class="label">TOE:</SPAN></TD> 
<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR> 
<TR> 
<!-- a bunch more rows --> 
</TABLE> 

次の正規表現:

/.*?Prop\sTaxes(.|\s)*?d97m50.*?\$(.*?)<\/span/mg 

は、あなたが、あなたのように処理することができ、その第二試合で「4586」の値を生成しますが願い。

複数の一致を取得して処理する方法の例を以下に示します。

Javascript Regular Expression multiple match

このコードは、私の作品:

function regExTest() { 
    var s = '<TABLE class="d97m2" cellSpacing=0 cellPadding=0 sizset="false"  sizcache06358115873960983="276 82 150">' + 
    '<!-- A bunch of other rows -->' + 
    '<TR>' + 
    '<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD>' + 
    '<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$1,986</span></TD>' + 
    '<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD>' + 
    '<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD>' + 
    '<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m46"><span class="label">TOE:</SPAN></TD>' + 
    '<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR>' + 
    '<TR>' + 
    '<TR>' + 
    '<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD>' + 
    '<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$4,586</span></TD>' + 
    '<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD>' + 
    '<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD>' + 
    '<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m46"><span class="label">TOE:</SPAN></TD>' + 
    '<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR>' + 
    '<TR>' + 
    '<TR>' + 
    '<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD>' + 
    '<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$2,514</span></TD>' + 
    '<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD>' + 
    '<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD>' + 
    '<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m46"><span class="label">TOE:</SPAN></TD>' + 
    '<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR>' + 
    '<TR>' + 
    '<TR>' + 
    '<TD class="d97m40"><span class="label">Prop Taxes:</SPAN></TD>' + 
    '<TD class="d97m50" colSpan=2><SPAN class="wrapped-field">$3,312</span></TD>' + 
    '<TD class="d97m43"><span class="label d97m29">Garbage:</SPAN></TD>' + 
    '<TD class="d97m26"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m44"><span class="label">Parking Inc:</SPAN></TD>' + 
    '<TD class="d97m45"><SPAN class="wrapped-field">$0</span></TD>' + 
    '<TD class="d97m46"><span class="label">TOE:</SPAN></TD>' + 
    '<TD class="d97m47"><SPAN class="wrapped-field">$10,248</span></TD></TR>' + 
    '<TR>' + 
    '<!-- a bunch more rows -->' + 
    '</TABLE>'; 

    var qualityRegex = /.*?Prop\sTaxes(.|\s)*?d97m50.*?\$(.*?)<\/span/mg, 
     matches = []; 

    var match = qualityRegex.exec(s); 
    while (match != null) { 
     matches.push(match[2]); 
     match = qualityRegex.exec(s); 
    } 

    /* Matches now contains the numbers you require */ 
} 
+0

正規表現を試しましたが、タイムアウトしました。 Apps Script関数と[RegExr](http://regexr.com/)の両方を使って試してみました。どちらも同じ結果でした。 – Kris

+0

私が試したコードは次のとおりです: 'var page = UrlFetchApp.fetch(url).getContentText(); (2); – Kris

+0

どのくらい奇妙ですか?var propTax = page.match(/.* Prop \ sTaxes(。| \ s)* d97m50。* \ $(。*)<\/span/mg)それは実際には機能しませんでした。私の変更されたコードでは、それらの後ろに疑問符を付け加えて*括弧をつけないでください。関数を試して、それがあなたのために働くかどうかを見てください。 – alfiethecoder

0

一つのかなり単純な方法は、例えば、シート内IMPORTHTML機能を使用することです:

=importhtml("http://www.tradingeconomics.com/zambia/rating","table",1) 
+0

ニースの回避策ジャン。適切なテーブル番号(ページに30個ありました)とvlookupを見つけるための少しの試行錯誤の後、私はこの作業を行うことができました。私は、Appsスクリプトベースのアプローチのほうがもっと望めていたので、単に関数を呼び出して適切な値を返すことができました。誰もそのようなものを提供しないなら、これを正解とマークします。 – Kris

関連する問題