iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
0
Software Development

[行銷也要自動化] 用 Python Selenium + NodeJS + Amazon EC2 打造簡易關鍵字搜尋報表應用!系列 第 4

Day3:關於middleware的小示範|KeywordSearch 1.0 爬蟲關鍵字報表工具

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

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

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

昨天我們實作Express 4架出自己的App,以及動手設定了新的route。還記得前天我們提過middleware的作用吧?
在我們把爬蟲script寫進function以前,先再把middleware的實現方式搞清楚一點。
到目前為止我們只知道,在router.get中使用next()表示接續下一個middleware,但實際上要怎麼運用呢?
讓我們接續使用昨天的code,加上幾行來了解:

筆者也只是新手,為保大家學習品質,我是先閱讀完官方文件、自己理解後再寫出來;即便這些實例並非100%原創,但絕非直接複製其他網站資料過來的唷

使用情境1:如果同一個路徑你有先後次序的訊息想要顯示

打開你的about.js,小小調整一下router.get內部:

// about.js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    + console.log('URL: ', req.originalUrl);
    + next();
+ }, function(req, res, next) {
    + console.log('Type: ', req.method);
    res.send('respond with a yo');
});

module.exports = router;

接著在terminal運行:

user@ubuntu:/NodeJS/tutorial$ cd bin/
user@ubuntu:/NodeJS/tutorial/bin$ node www

因為你的console.log訊息是寫在router裡面,意思是當你用GET method request url的時候,他才會被執行。
因此我們讓瀏覽器前往localhost:3000/about,看到他成功出現和以前一樣的訊息(respond with a yo),再回到terminal看

user@ubuntu:/NodeJS/tutorial/bin$ node www
URL: /about
Type: GET
GET /about 200 86.840 ms - 1

就能看到我們的URL和Type依序出現,about.js第6行的next();奏效了。

接下來用個複雜一點的,結合不同訊息推到頁面上。

使用情境2:如果你有不同編號的路徑,大體上的結構差不多,但想呈現不同的內容

一樣是about.js

// about.js
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    res.send('respond with a yo');
});

+ router.get('/:id', function(req, res, next) {
    + if (req.params.id === '666') next('route');
    + else next();
+ }, function(req, res, next) {
    + res.send('nah, not 666');
+ });

+ router.get('/:id', function(req, res, next) {
    + res.send('666666666666666666666');
+ });

module.exports = router;

第8行:id意思是 localhost:3000/about/後面接任意數字
第9行req.params.id是解析url中對應id的值;如果判斷id是666,就會運行後面的next('route'),並接到下一個router.get,也就是第15行

接著一樣在terminal運行:

user@ubuntu:/NodeJS/tutorial/bin$ node www

然後我們到localhost:3000/about實驗一下,輸入localhost:3000/about/109273,頁面回傳 "nah, not 666"
再輸入localhost:3000/about/666,頁面這時回傳 "666666666666666666666"
這個部分在驗證用戶登入,或回傳相對應blogpost、todolist相當好用。


很明顯的今天是一個小品XD
明天我們實作如何get url params,並酌量補充說明其他api。因為到後面我們會從url中抓取使用者輸入的關鍵字後,丟到selenium script執行。


上一篇
Day2:NodeJS 與 Express 4、route設定|KeywordSearch 1.0 爬蟲關鍵字報表工具
下一篇
Day4:NodeJS req.query() 應用|KeywordSearch 1.0 爬蟲關鍵字報表工具
系列文
[行銷也要自動化] 用 Python Selenium + NodeJS + Amazon EC2 打造簡易關鍵字搜尋報表應用!14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言