Text 从网页抓取文本并存储为变量

Text 从网页抓取文本并存储为变量,text,google-apps-script,pull,Text,Google Apps Script,Pull,在网页上 它列出了游戏中某个特定物品的价格,我想获取该物品的“当前指导价格”,并将其存储为一个变量,以便在谷歌电子表格中输出。我只想要这个号码,目前是“643.8k”,但我不知道如何抓取这样的具体文本 因为数字是“k”形式的,这意味着我无法绘制它,它必须是643800这样的数字才能绘制。我有一个公式,我的第二个问题是,是否有可能对拉取的数字使用公式,然后将其存储为最终输出 -编辑- 这就是我到目前为止所做的,它不起作用,不知道为什么 function pullRuneScape() { va

在网页上

它列出了游戏中某个特定物品的价格,我想获取该物品的“当前指导价格”,并将其存储为一个变量,以便在谷歌电子表格中输出。我只想要这个号码,目前是“643.8k”,但我不知道如何抓取这样的具体文本

因为数字是“k”形式的,这意味着我无法绘制它,它必须是643800这样的数字才能绘制。我有一个公式,我的第二个问题是,是否有可能对拉取的数字使用公式,然后将其存储为最终输出

-编辑-

这就是我到目前为止所做的,它不起作用,不知道为什么

function pullRuneScape() {

var page = UrlFetchApp.fetch("http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463").getContentText();

  var number = page.match(/Current guide price:<\/th>\n(\d*)/)[1];

  SpreadsheetApp.getActive().getSheetByName('RuneScape').appendRow([new Date(), number]);

}
函数pullRuneScape(){
var page=UrlFetchApp.fetch(“http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463)。getContentText();
var编号=第页。匹配(/当前指导价:\n(\d*)/)[1];
SpreadsheetApp.getActive().getSheetByName('RuneScape').appendRow([new Date(),number]);
}

使用UrlFetch获取页面[1]。这将返回一个HTTPResponse,您可以使用GetBlob[2]读取它。一旦有了文本,就可以使用正则表达式。在这种情况下,只需搜索“当前指导价:”,然后阅读下一行。要删除“k”,您可以用reg ex替换,如下所示:

'123k'.replace(/k/g,'')
将返回“123”


  • 显然,您没有得到任何东西,因为regexp是错误的。我不是regexp专家,但我能够使用基本的字符串操作提取数字

      var page = UrlFetchApp.fetch("http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463").getContentText();
    
      var TD = "<td>";
      var start = page.indexOf('Current guide price');
      start = page.indexOf(TD, start); 
      var end = page.indexOf('</td>',start);
      var number = page.substring (start + TD.length , end);
    
      Logger.log(number);
    
    最后,将两者结合在一起

    function pullRuneScape() {
    
    var page = UrlFetchApp.fetch("http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463").getContentText();
    
      var TD = "<td>";
      var start = page.indexOf('Current guide price');
      start = page.indexOf(TD, start); 
      var end = page.indexOf('</td>',start);
      var number = page.substring (start + TD.length , end);
    
      Logger.log(number);
    
      var numericPart = number.substring(0, number.length -1); 
      var multiplierSymbol = number.substring(number.length -1 , number.length);
      var multiplier = getMultiplyingFactor(multiplierSymbol);
      var fullNumber = multiplier == 1 ? number : numericPart * multiplier;
      Logger.log(fullNumber);
    }
    
    函数pullRuneScape(){
    var page=UrlFetchApp.fetch(“http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463)。getContentText();
    var TD=“”;
    var start=page.indexOf(“当前指导价”);
    开始=第页索引(TD,开始);
    var end=page.indexOf(“”,开始);
    变量编号=page.substring(开始+TD.length,结束);
    Logger.log(编号);
    var numericPart=number.substring(0,number.length-1);
    var乘数符号=number.substring(number.length-1,number.length);
    var乘数=getMultiplyingFactor(乘数符号);
    var fullNumber=乘数==1?数字:数字部分*乘数;
    Logger.log(完整编号);
    }
    

    当然,这不是做事情的最佳方式,但它是有效的

    您的正则表达式是错误的。我成功地测试了这个:

    var number = page.match(/Current guide price:<\/th>\s*<td>([^<]*)<\/td>/m)[1];
    

    var number=page.match(/Current guide price:\s*([^基本上我像您一样解析html页面(使用更正的正则表达式),并将字符串拆分为数字部分和乘法器(k=1000)。最后我返回提取的数字。这个函数可以在Google文档中使用

    function pullRuneScape() {
      var pageContent = UrlFetchApp.fetch("http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463").getContentText();
      var matched = pageContent.match(/Current guide price:<.th>\n<td>(\d+\.*\d*)([k]{0,1})/);
    
      var numberAsString = matched[1];
      var multiplier = "";
    
      if (matched.length == 3) {
        multiplier = matched[2];
      }
    
      number = convertNumber(numberAsString, multiplier);
      return number;
    }
    
    function convertNumber(numberAsString, multiplier) {
      var number = Number(numberAsString);
    
      if (multiplier == 'k') {
        number *= 1000; 
      }
    
      return number;
    }
    
    函数pullRuneScape(){
    var pageContent=UrlFetchApp.fetch(“http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463)。getContentText();
    var matched=pageContent.match(/当前指导价:\n(\d+\.*\d*)([k]{0,1})/);
    var numberAsString=匹配的[1];
    var乘数=”;
    如果(匹配的长度==3){
    乘数=匹配的[2];
    }
    number=convertNumber(numbersString,乘数);
    返回号码;
    }
    函数convertNumber(NumberString,乘法器){
    变量编号=编号(NumberString);
    如果(乘数='k'){
    数字*=1000;
    }
    返回号码;
    }
    
    要获取该值,请查看此项并了解如何从站点中提取文本。除了从电子表格中提取文本外,您还可以使用函数
    =SUBSTITUTE(T(A1),“k”,“00”)根据需要处理该值
    是的,但我想通过google apps脚本来实现,所以我只能用计时器每隔X分钟提取一次该数字。我没有尝试过这一点,但也许你可以在电子表格中添加一个用于刷新的抓取结果,然后你可以在任何其他GAS.var page=fetchurlapp.fetch(“LINK”).getContentText()中读取该电子表格;是我到目前为止在urlfetch中得到的。您能提供更多的帮助吗?当然,在HTML中您会看到:
    Current guide price:132k
    ,因此您需要使用以下内容:number=page.match(/Current guide price:\n(\d*)/)[1];编号将仅为“132”。有关此正则表达式的详细信息,请在regexpal.com上尝试。我用迄今为止的内容对我的原始帖子进行了编辑,但它没有输出任何内容,只输出了A.number=page.match列上的日期(/当前指导价:\n(\d*)/)[1];不提取任何编号=(不确定你为什么赢得了游戏。+50。谢谢。
    function pullRuneScape() {
      var pageContent = UrlFetchApp.fetch("http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463").getContentText();
      var matched = pageContent.match(/Current guide price:<.th>\n<td>(\d+\.*\d*)([k]{0,1})/);
    
      var numberAsString = matched[1];
      var multiplier = "";
    
      if (matched.length == 3) {
        multiplier = matched[2];
      }
    
      number = convertNumber(numberAsString, multiplier);
      return number;
    }
    
    function convertNumber(numberAsString, multiplier) {
      var number = Number(numberAsString);
    
      if (multiplier == 'k') {
        number *= 1000; 
      }
    
      return number;
    }