在网页
上http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463
它列出了游戏中特定项目的价格,我想获取所述项目的“当前指导价格:”,并将其存储为变量,以便我可以在谷歌电子表格中输出。我只想要这个号码,目前它是“643.8k”,但我不知道如何获取这样的特定文本。
由于数字是“k”形式,这意味着我无法绘制图形,它必须是像643,800这样才能使它变形。我有一个公式,我的第二个问题是要知道是否可以在拉出的数字上使用公式,然后将其存储为最终输出?
- 编辑 -
这是我到目前为止所做的事情,并不能确定原因。
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]);
}
答案 0 :(得分:1)
使用UrlFetch获取页面[1]。那将返回一个你可以用GetBlob [2]读取的HTTPResponse。获得文本后,您可以使用正则表达式。在这种情况下,只需搜索'当前指导价:',然后阅读下一行。至于删除'k',你可以用这样的reg ex替换:
'123k'.replace(/k/g,'')
只返回'123'。
答案 1 :(得分:1)
显然,你没有得到任何东西,因为正则表达式是错误的。我没有正则表达式专家,但我能够使用基本字符串操作提取数字
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);
然后,我写了一个函数将k,m等转换成相应的乘法因子。
function getMultiplyingFactor(symbol){
switch(symbol){
case 'k':
case 'K':
return 1000;
case 'm':
case 'M':
return 1000 * 1000;
case 'g':
case 'G':
return 1000 * 1000 * 1000;
default:
return 1;
}
}
最后,把两者绑在一起
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);
}
当然,这不是最佳的做事方式,但它有效。
答案 2 :(得分:1)
你的正则表达式错了。我成功测试了这个:
var number = page.match(/Current guide price:<\/th>\s*<td>([^<]*)<\/td>/m)[1];
它的作用:
Current guide price:<\/th>
查找当前指导价格:并关闭td标记\s*<td>
允许标记之间的空格,找到开放标记([^<]*)
构建一个组并匹配除此char&lt; <\/td>
匹配结束标记/m
匹配多行答案 3 :(得分:0)
基本上我像你一样解析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;
}