什麼是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%原創,但絕非直接複製其他網站資料過來的唷
打開你的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();
奏效了。
接下來用個複雜一點的,結合不同訊息推到頁面上。
一樣是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執行。