在網路尋找中無意間發現有外部套件 Cheerio 可以用來解析HTML,經過測試確實可以在GAS環境上使用也非常方便,之後也將全面採行,以下就稍微說明相關作法。
GAS版的 Cheerio 是外國人將 Cheerio 封裝而成的函式庫,需要透過Script ID加入GAS函式庫中。
Script ID:1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
以下就手把手帶各位操作。
步驟1:新增 Google 試算表。
步驟2:點擊「指令碼編輯器」,開啟「App Script」編輯環境。
步驟3:點擊「資料庫」,輸入Script ID,新增「函式庫」。
GAS版的 Cheerio 是外國人將 Cheerio 封裝而成的函式庫,需要透過Script ID加入GAS函式庫中。
Script ID:1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
以下就手把手帶各位操作。
步驟1:新增 Google 試算表。
步驟2:點擊「指令碼編輯器」,開啟「App Script」編輯環境。
步驟3:點擊「資料庫」,輸入Script ID,新增「函式庫」。
步驟4:輸入程式碼,抓取「Yahoo主力進出表」。
function getStockMajor() { var st = SpreadsheetApp.getActiveSpreadsheet(); var sheet = st.getSheets()[0].clear(); //連線Yahoo主力進出表 var URL = "https://tw.stock.yahoo.com/d/s/major_2330.html"; var source = UrlFetchApp.fetch(URL); var html = source.getContentText('BIG5'); //DOM解析HTML const $ = Cheerio.load(html,{ decodeEntities: false }); var table, tr, td; //表格資訊 table = $('table table').eq(0); tr = table.find('tr'); td = tr.eq(0).find('td'); sheet.getRange(1, 1).setValue(td.eq(0).text().trim()); sheet.getRange(1, 3).setValue(td.eq(1).text().trim()); //表格內容 table = $('table table').eq(1); tr = table.find('tr'); for(var i = 0 ; i < tr.length ; ++i) { td = tr.eq(i).find('td'); for(var j = 0 ; j < td.length ; ++j) { sheet.getRange(i + 2, j + 1).setValue(td.eq(j).text().trim()); } } }
步驟5:點擊「存檔」與「執行」按鈕。
接著就是一連串的權限設定。
最後執行的結果。
參考資料
沒有留言:
張貼留言