iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
0

什麼是KeywordSearch 1.0 爬蟲關鍵字報表工具?
是作者近期兩周實作出來的小專案,結合不同關鍵字搜尋工具的api及部分爬蟲,讓使用者可以一鍵拿到搜尋趨勢和相似詞組推薦。此專案尚有很大擴充空間,未來在作者自己的部落格若有進一步更新,會回來附在此處:________

為什麼要做KeywordSearch 1.0?
精闢有效的前導市調可以避免不符市場需求的產品出現,定期觀測關鍵字趨勢,是網路行銷或市場分析人員的日常;但網路資訊四散各地,市調人除了大量閱讀、蒐集、篩選判斷外,還要把資料整理過後呈現給團隊,這個過程非常需要耐心、想像力、判斷力、大把時間,能夠獨立做出完整市調非常不容易;因此作者和朋友想幫市調人員節省文書、搜尋時間,讓他們能專注在判斷、分析上。

現在進度到哪了?為什麼文章是有關nodejs?
這個工具已經開發完成,現在在測試修改中,這30天文章是想把自己的開發過程完整記錄下來。第一周的進度是初步架好NodeJS App的基底,以及在jupyter上測試爬蟲script。

昨天我們簡單玩了一下爬蟲,今天就要來開始準備我們的應用程式啦!
就像你昨天看到的,雖然用terminal或jupyter都可以run爬蟲程式,但如果想開發成一個人人都可以使用的application,我決定把爬蟲程式寫進nodejs的function來執行。

第二天進度條來到安裝nodejs XD

安裝 Nodejs // Ubuntu 16.04

採用PPA(註1)來安裝最新的nodejs(包含npm),

  1. 運行指令安裝PPA:
$ curl -sL https://deb.nodesource.com/setup_$8.x | sudo -E bash -

註1:PPA(personal package archive)是為了方便Ubuntu用戶安裝那些無法進入官方套件庫的package而生的套件管理包。

  1. 接著用apt-get安裝nodejs(nodejs包含nodejs和npm):
$ sudo apt-get install -y nodejs

安裝完畢後,你可以運行以下指令來檢查版本:

$ node -v
$ npm -v

如何 setup 一個最陽春的 nodejs server

原本我的appliation是直接用Express 4來架構,不過既然我們提到了nodejs,還是來理解一下他的原理。
確認好node及npm都安裝了以後,在你滿意的地方創一個新資料夾、進到資料夾中並把他用code editor開啟(我預設的是VScode):

$ mkdir yangChunServer
$ cd yangChunServer
$ code .

new一個app.js,

  1. 引入http module(註2),在nodejs中用require方法來import:
// app.js
var http = require('http');

註2:這個內建的http module是用來讓nodejs能順利在超文本傳輸協定(hyper text transfer protocol)中傳遞資料。

  1. 創建一個Server監聽client端的request,並response資料回到client端:
// 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!');
  1. 在terminal用node指令運行看是否成功:
$ node app.js

順利的話應該會出現"Server is running at localhost:3000!",切換瀏覽器到localhost:3000,也能看到Hello Keyword。


同場加映:Connect

剛剛看到的是最陽春的nodejs,你可以發現他只能response一次資料。如果我們有不同次序的資料想要response到client端該怎麼辦呢?這時候你可以用nodejs的middleware framework:Connect。
他帶有許多的內置middleware,詳細可以拜讀這篇:http://blog.fens.me/nodejs-connect/

  1. npm安裝conncet:
$ npm install connect
  1. 在剛剛的app.js中,引入connect:
// app.js
var http = require('http');
+ var connect = require('connect');
  1. 接著以connect方法創一個實例取名為app;原本createServer呼叫的function改成我們的connect實例app:
// 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!');
  1. 現在看起來跟陽春型的沒什麼太大差別,剛剛有說connect是node的middleware framework,有多個中間件要處理才有意義,因此我們來加入兩個function分別先後console.log一些資料:
// 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 firstOnenext() 拿掉,那下一個 function nextOne 就無法執行到了。


下一篇我們要來使用Express 4 重新架構(是很快的那種 ;-) )並處理route的部分。


上一篇
Day0:KeywordSearch 1.0 教學文概覽 + 核心功能(Selenium)前情提要
下一篇
Day2:NodeJS 與 Express 4、route設定|KeywordSearch 1.0 爬蟲關鍵字報表工具
系列文
[行銷也要自動化] 用 Python Selenium + NodeJS + Amazon EC2 打造簡易關鍵字搜尋報表應用!14

尚未有邦友留言

立即登入留言