2013-05-09 68 views
2

存儲在網頁抓住從網頁文本和可變

http://services.runescape.com/m=itemdb_rs/Armadyl_chaps/viewitem.ws?obj=19463

它列出的價格在遊戲中的特定項目,我想抓住「當前指導價:」中所述項目,以及將它存儲爲一個變量,以便我可以在谷歌電子表格中輸出它。我只想要這個號碼,目前它是「643.8k」,但我不確定如何抓取這樣的特定文本。

由於數字爲「k」形式,這意味着我無法繪製它,它必須是643,800這樣的東西才能繪製圖案。我有一個公式,我的第二個問題是要知道是否可以使用拉數的公式,然後將其存儲爲最終輸出?

CNC中

這是我迄今爲止,它不工作不知道爲什麼。

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]); 

} 
+1

要獲取該值,請查看此[視頻](http://www.youtube.com/watch?v=EXhmF9rjqP4)並瞭解如何從網站中刮取文本。從電子表格中,您可以使用函數'= SUBSTITUTE(T(A1),「k」,「00」)來處理該值。' – Jacobvdb 2013-05-09 02:37:13

+0

是的,但我想通過谷歌應用程序腳本來做到這一點,用定時器每X分鐘編號。 – Aaron 2013-05-09 03:02:13

+0

我沒有試過這個,但是也許你可以添加一個[時間驅動的觸發器](https://developers.google.com/apps-script/execution_time_triggers?hl=en)到電子表格中,並刷新刷新結果,您可以在任何其他GAS中閱讀此電子表格。 – Jacobvdb 2013-05-09 03:07:33

回答

1

你的正則表達式是錯誤的。我測試了一個成功:

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

作用:

  1. Current guide price:<\/th>找到當前指導價:閉td標籤
  2. \s*<td>允許標籤之間的空白,找到打開td標籤
  3. ([^<]*)建立羣組並匹配除此字符以外的所有內容<
  4. <\/td>匹配閉td標籤
  5. /m匹配多
+0

您贏得比賽,爲您贏得+50。謝謝。 – Aaron 2013-05-22 20:25:24

1

使用UrlFetch獲取頁面[1]。這將返回一個HTTPResponse,您可以使用GetBlob [2]讀取它。一旦你有了文字,你就可以使用正則表達式。在這種情況下,只需搜索'當前指導價:'然後閱讀下一行。至於刪除'k',你可以用reg ex替換這樣的:

'123k'.replace(/k/g,'') 

只會返回'123'。

  1. https://developers.google.com/apps-script/reference/url-fetch/
  2. https://developers.google.com/apps-script/reference/url-fetch/http-response
+0

var page = UrlFetchApp.fetch(「LINK」)。getContentText(); 是我迄今爲止獲得的urlfetch。 – Aaron 2013-05-09 04:17:22

+0

你可以提供更多的幫助嗎? – Aaron 2013-05-10 00:34:18

+1

當然,所以在HTML,你會看到: '當前指導價: ​​132K' 所以你要使用這樣的: 數=頁面。匹配(/當前指導價格:<\/th> \ n(\ d *)/)[1]; 號碼只會是'132'。有關此正則表達式的更多信息,請在regexpal.com上嘗試。 – 2013-05-11 02:08:01

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); 
} 

當然,不做事的最佳方式,但它的工作原理。

0

基本上我解析爲你沒有(具有校正正則表達式)和字符串分割成數部分和乘數(K = 1000)的HTML頁面。最後我返回提取的數字。該功能可用於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; 
}