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