在網路尋找中無意間發現有外部套件 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:點擊「存檔」與「執行」按鈕。
接著就是一連串的權限設定。
最後執行的結果。
參考資料














沒有留言:
張貼留言