node爬虫(三)
2017-09-10 本文已影响0人
silentsvv
成功获取数据,接下来我们试着将数据放在服务器,然后我们在页面请求数据
- 使用node的koa框架
- 涉及es6的async 函数
start
首先npm install koa --save
我的packjson目录如下
{
"name": "tuku",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node koa.js"
},
"engines": {
"node": "7.10.0"
},
"author": "silentsvv",
"license": "ISC",
"devDependencies": {
},
"dependencies": {
"koa": "^2.3.0",
"cheerio": "^0.22.0",
"chromedriver": "^2.29.0",
"selenium-webdriver": "^3.4.0"
}
}
新建一个koa.js文件,进行简单的测试
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx) => {
ctx.body = 'hello world'
});
app.listen(3000);
输入node koa.js
然后打开http://localhost:3000来查看是否显示成功。
输出成功!
接下来,我们要试着返回我们刚刚获取的爬虫信息。
- index.js
将原来的内容,变成promise函数导出
function Spider() {
return new Promise((resolve) => {
require('chromedriver'); //chrome浏览器驱动
let webdriver = require('selenium-webdriver'); //浏览器自动操作
let cheerio = require('cheerio'); //获取页面数据
let fs = require('fs');
let driver = new webdriver.Builder().forBrowser('chrome').build()
let data = new Map()
driver.get('http://tu.duowan.com/tu')
let PageSource = driver.getPageSource().then((val) => {
const $ = cheerio.load(val); //解析网站
let result = $('.masonry-brick:not(.tags) a').find('img') //寻找有图片的节点
let parent,textNode,title,link,imgSrc;
result.each((i,elem) => {
let obj = {};
parent = $(elem).closest('li') //图片所在li父节点
textNode = parent.find('em a')
title = textNode.text()
link = textNode.attr('href')
imgSrc = $(elem).attr('src')
obj = {
imgSrc,
link
}
data.set(title,obj)
})
driver.close(); // 关闭浏览器
resolve(data); //返回data
return data;
})
})
}
module.exports = Spider;
- koa.js
返回信息
const Koa = require('koa');
const app = new Koa();
const Spider = require('./index.js') //引用spider函数
app.use(async (ctx) => {
let data = await Spider();
let text = [...data] //将返回的map对象转成数组
ctx.body = JSON.stringify(text) //将数组转成文本
});
app.listen(3000);
接下来试一下运行node koa.js
,打开http://localhost:3000地址,待爬虫完毕后会出现以下数据。
后台返回数据成功!