用 request 抓取頁面 HTML
用 Chrome Developer Tool 觀察 HTML 結構以下為證交所網站資料
<table> | |
<thead> | |
<tr> | |
<th colspan='9'> | |
<div>105年02月 3008 大立光 各日成交資訊</div> | |
</th> | |
</tr> | |
<tr> | |
<td>日期</td> | |
<td>成交股數</td> | |
<td>成交金額</td> | |
<td>開盤價</td> | |
<td>最高價</td> | |
<td>最低價</td> | |
<td>收盤價</td> | |
<td>漲跌價差</td> | |
<td>成交筆數</td> | |
</tr> | |
</thead> | |
<tbody> | |
<tr> | |
<td>105/02/01</td> | |
<td>2,260,409</td> | |
<td>5,523,826,200</td> | |
<td>2,485.00</td> | |
<td>2,550.00</td> | |
<td>2,350.00</td> | |
<td>2,350.00</td> | |
<td>-150.00</td> | |
<td>2,164</td> | |
</tr> ...... |
把
request
這個 library require 進來之後,就可以用它來發 HTTP request 拿到網頁的 body,參考下面的 code,拿到的 body
是一個字串,就是整個網頁的 HTMLconst request = require('request')
const url = 'http://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&date=20171001&stockNo=3008'
request(url, (err, res, body) => {
console.log(body)
})
用 cheerio 擷取我們要的部份
拿到
body
之後接著要擷取出要的部份,cheerio 可以用 css selector的語法來選擇元素const cheerio = require('cheerio')
// 把 body 放進 cheerio 準備分析
const $ = cheerio.load(body)
let stock = []
$('tbody td').each(function(i, elem) {
sotck.push( $(this).text());
})
console.log(stock)
整理資料
因為拿到的資料滿亂的,稍微把它整理一下並輸出
//欄位0日期
if (i%5==0)
stock.push( $(this).text());
//欄位2當日最高價
if (i%5==2)
stock.push( parseFloat($(this).text().replace(/,/g,'')));
輸出暫存
存好後放入txt,db隨便...之後開始賺錢?!技術分析
總結
- 先找到要抓哪個網站的資料
- 用 Chrome Developer Tool 觀察 HTML 結構
- 寫 code 用 request 向網站要資料
- 把要來的資料用 cheerio 取出要的部份
- 把資料整理完之後輸出
參考:https://larrylu.blog/nodejs-request-cheerio-weather-414e33f45c7d
0 意見:
張貼留言