Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用Google应用程序脚本从网页中的表中提取值_Google Apps Script - Fatal编程技术网

Google apps script 使用Google应用程序脚本从网页中的表中提取值

Google apps script 使用Google应用程序脚本从网页中的表中提取值,google-apps-script,Google Apps Script,我试图从一个网页中提取一个特定的值,这样我就可以把它拉到一个GoogleSheets电子表格中。问题是页面的结构不便于提取值 鉴于下面的HTML,有谁能建议一种方法,在包含“道具税”的元素之后从TD元素中提取“$4586”?页面上有很多TDs的类为“d97m50”。还有很多表的类别为“d97m2” 我尝试了以下方法,但两种方法都没有成功。对于第一个,我无法确定一种方法来迭代页面上的TDs,在包含“道具税”的TDs之后找到TD,然后从中提取文本。第二个失败了,因为我无法确定一个正则表达式可以做同样

我试图从一个网页中提取一个特定的值,这样我就可以把它拉到一个GoogleSheets电子表格中。问题是页面的结构不便于提取值

鉴于下面的HTML,有谁能建议一种方法,在包含“道具税”的元素之后从TD元素中提取“$4586”?页面上有很多TDs的类为“d97m50”。还有很多表的类别为“d97m2”

我尝试了以下方法,但两种方法都没有成功。对于第一个,我无法确定一种方法来迭代页面上的TDs,在包含“道具税”的TDs之后找到TD,然后从中提取文本。第二个失败了,因为我无法确定一个正则表达式可以做同样的事情


道具税:
$4,586
垃圾:
$0
停车场公司:
$0
脚趾:
$10,248

拉表的一种相当简单的方法是在工作表中使用importhtml函数,例如:

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

如果您可以将希望处理的HTML转换为Javascript字符串对象,那么可以使用正则表达式来标识您要处理的特定字符串

例如,给定您的测试文本:

<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>

道具税:
$4,586
垃圾:
$0
停车场公司:
$0
脚趾:
$10,248
以下正则表达式:

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

var qualityRegex=/.*Prop\sTaxes(.\124;\ s)*?d97m50.\$(.*)尝试了正则表达式,但一直超时。已尝试使用应用程序脚本函数和。两者都有相同的结果。我尝试的代码是:
var page=UrlFetchApp.fetch(url.getContentText();var propTax=page.match(/.*Prop\sTaxes(.|\s)*d97m50.\$(*)真奇怪。它确实不起作用。因此在我修改的代码中,我通过在所有*量词后面添加问号,使它们不贪婪,现在它们起作用了。尝试该函数,看看它是否适用于您。很好的解决方法Jann。经过一点尝试和错误,找到正确的表号(页面上有30个)和一个vlookup,我能够做到这一点。不过我希望更多的是基于应用程序脚本的方法——这样我就可以简单地调用一个函数并让它返回适当的值。如果没有人提供这样的答案,我会将其标记为正确答案。
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 */
}