什麼是KeywordSearch 1.0 爬蟲關鍵字報表工具?
是作者近期兩周實作出來的小專案,結合不同關鍵字搜尋工具的api及部分爬蟲,讓使用者可以一鍵拿到搜尋趨勢和相似詞組推薦。此專案尚有很大擴充空間,未來在作者自己的部落格若有進一步更新,會回來附在此處:________為什麼要做KeywordSearch 1.0?
精闢有效的前導市調可以避免不符市場需求的產品出現,定期觀測關鍵字趨勢,是網路行銷或市場分析人員的日常;但網路資訊四散各地,市調人除了大量閱讀、蒐集、篩選判斷外,還要把資料整理過後呈現給團隊,這個過程非常需要耐心、想像力、判斷力、大把時間,能夠獨立做出完整市調非常不容易;因此作者和朋友想幫市調人員節省文書、搜尋時間,讓他們能專注在判斷、分析上。現在進度到哪了?為什麼文章是有關nodejs?
這個工具已經開發完成,現在在測試修改中,這30天文章是想把自己的開發過程完整記錄下來。第一周的進度是初步架好NodeJS App的基底,以及在jupyter上測試爬蟲script。
昨天我們簡單玩了一下爬蟲,今天就要來開始準備我們的應用程式啦!
就像你昨天看到的,雖然用terminal或jupyter都可以run爬蟲程式,但如果想開發成一個人人都可以使用的application,我決定把爬蟲程式寫進nodejs的function來執行。
第二天進度條來到安裝nodejs XD
採用PPA(註1)來安裝最新的nodejs(包含npm),
$ curl -sL https://deb.nodesource.com/setup_$8.x | sudo -E bash -
註1:PPA(personal package archive)是為了方便Ubuntu用戶安裝那些無法進入官方套件庫的package而生的套件管理包。
$ sudo apt-get install -y nodejs
安裝完畢後,你可以運行以下指令來檢查版本:
$ node -v
$ npm -v
原本我的appliation是直接用Express 4來架構,不過既然我們提到了nodejs,還是來理解一下他的原理。
確認好node及npm都安裝了以後,在你滿意的地方創一個新資料夾、進到資料夾中並把他用code editor開啟(我預設的是VScode):
$ mkdir yangChunServer
$ cd yangChunServer
$ code .
new一個app.js,
// app.js
var http = require('http');
註2:這個內建的http module是用來讓nodejs能順利在超文本傳輸協定(hyper text transfer protocol)中傳遞資料。
// app.js
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Keyword\n');
}).listen(3000);
console.log('Server is running at localhost:3000!');
$ node app.js
順利的話應該會出現"Server is running at localhost:3000!",切換瀏覽器到localhost:3000,也能看到Hello Keyword。
剛剛看到的是最陽春的nodejs,你可以發現他只能response一次資料。如果我們有不同次序的資料想要response到client端該怎麼辦呢?這時候你可以用nodejs的middleware framework:Connect。
他帶有許多的內置middleware,詳細可以拜讀這篇:http://blog.fens.me/nodejs-connect/
$ npm install connect
// app.js
var http = require('http');
+ var connect = require('connect');
// app.js
var http = require('http');
var connect = require('connect');
+ var app = connect();
+ http.createServer(app).listen(3000);
console.log('Server is running at localhost:3000!');
// app.js
var http = require('http');
var connect = require('connect');
var app = connect();
+ function firstOne (req, res, next) {
console.log('do this first');
next(); // 你可以發現如果把這行去掉,就無法在terminal中看到下一行的"and then this"
}
+ function nextOne (req, res, next) {
console.log('and then this');
next();
}
+ app.use(firstOne);
+ app.use(nextOne);
http.createServer(app).listen(3000);
console.log('Server is running at localhost:3000!');
其中的next(),用來連結middleware之間的啟動。如果我們在 function firstOne
把 next()
拿掉,那下一個 function nextOne
就無法執行到了。
下一篇我們要來使用Express 4 重新架構(是很快的那種 ;-) )並處理route的部分。