Node.js --- 使用koa2編寫入門級資料爬蟲
阿新 • • 發佈:2018-12-11
在閱讀本文前請先確保已安裝好node.js(點選此處下載node.js)配置好環境變數相關(點選此處跳轉安裝配置教程),本文編輯器為vscode(點選此處下載vscode)IDE可根據個人喜好使用,那麼下載好執行環境和編輯的IDE之後,就開始了。
node.js + koa2爬蟲需要中介軟體列表
- cheerio: 爬蟲資料抓取的中介軟體
- superagent-charset: 解決爬蟲資料中文亂碼問題
- koa-router: koa路由,用於根據路由訪問對應程式碼塊,邏輯編寫等作用(把他理解為像日常API介面就好)
- koa2: 搭建伺服器環境等等(詳情可點選這裡)
開啟vscode,首先建立一個資料夾在這裡我就命名為doujiang,然後再資料夾內建立一個檔案,dou.js之後就可以開始了
在doujiang目錄下在vscode中開啟終端,快捷鍵為ctrl + ~(tab上面的那個按鍵)
進入目錄後輸入命令進行所需中介軟體下載
那麼瞭解了所需要下面的東西是什麼之後,就進行下載操作吧,如果安裝好了淘寶映象也可以使用cnpm
//一行命令就可以下載全部啦
npm i --save cheerio superagent-charset koa-router koa2
等待所需中介軟體下載完畢後,就開始編寫程式碼,首先使用require進行引入
const Koa = require('koa'), Router = require('koa-router'), cheerio = require('cheerio'), superagent = require('superagent-charset'), app = new Koa(), router = new Router();
然後編寫路由和搭建伺服器環境
router.get('/', function(ctx, next) {
ctx.body = "路由搭建好啦";
});
app
.use(router.routes())
.use(router.allowedMethods());
app.listen(3000, () => {
console.log('[服務已開啟,訪問地址為:] http://127.0.0.1:3000/');
});
環境搭建好後使用 node dou.js: http://127.0.0.1:3000/ 就可以訪問了
看見瀏覽器這樣就恭喜你了,成功了搭建了環境
那麼接下來,就開始編寫爬蟲需要程式碼了,首先要確定需要爬的網站,這裡我們去爬百度新聞,然後爬這個地方的列表文字
const Koa = require('koa'),
Router = require('koa-router'),
cheerio = require('cheerio'),
superagent = require('superagent-charset'),
app = new Koa(),
router = new Router();
let arr;
router.get('/', function(ctx, next) {
url = 'https://news.baidu.com/'; //百度新聞地址
//superagent不理解,請在文章開頭的地方尋找了解superagent,點選進去理解
superagent.get(url)
.charset('utf-8') //當前頁面編碼格式
.end((err, sres) => { //頁面獲取到的資料
let html = sres.text,
$ = cheerio.load(html, {
decodeEntities: false
}), //用cheerio解析頁面資料
obj = {};
arr = [];
//下面類似於jquery的操作,前端的小夥伴們肯定很熟悉啦
$(".hotnews ul li").each((index, element) => {
var $text = $(element).text();
arr.push($text);
});
});
ctx.body = arr;
});
app
.use(router.routes())
.use(router.allowedMethods());
app.listen(3000, () => {
console.log('[服務已開啟,訪問地址為:] http://127.0.0.1:3000/');
});
再次在命令列視窗輸入命令:node dou.js 就可以愉快的在瀏覽器看見這個畫面了
恭喜你,你的第一個node爬蟲完成啦~
注意的是,如果小夥伴去抓取其他頁面出現亂碼
可能就是程式碼的編碼格式和要抓取頁面的編碼格式不一樣導致的,要注意一下
以上就是本文的全部內容,希望幫到你