node和Python同样适合作爬虫爬取数据进行解析输出相应格式的json数据。 这个项目爬虫的基本原理在,获取到页面的HTML内容,使用cheerio去解析HTML,操做DOM节点获取数据。javascript
node+express+axoishtml
git clone https://github.com/fancyzhe/nodeGetData.git
npm install
npm start
复制代码
在项目的package.json
文件中定义了script"start": "nodemon app.js"
,用nodemon
护node进程,因此是项目中直接运行的app.js
java
express做为服务器 cheerio将获取到的HTML内容解析成DOM节点 request请求接口数据 path定义静态文件访问路径node
const express = require("express");
const cheerio = require("cheerio");
const request = require("request");
const path = require('path')
const app = express();

//定义要抓取数据的页面地址URL
const url = "https://movie.douban.com/";
复制代码
request请求异步,因此方法返回promise,在.then中去获取到request的数据。webpack
function getData(){
let data =[];
return new Promise((resolve,reject)=>{
request(url,(err,res,body)=>{
//body是页面的HTML内容,使用cheerio去解析它。
$ = cheerio.load(body);
//定义了$对象后,能够相似jQuery的用法去选择DOM节点
let content = $("#screening .ui-slide-item");
let length = content.length;
//获取的DOM节点对象数组进行循环,输出咱们想要的json对象
while(length--){
let title = $(content[length]).attr("data-title");
title && data.push(title);
}
resolve(data)
})
})
}
复制代码
以在审查元素中看到电影的名字在#screening .ui-slide-item
节点的data-title
属性中,因此在上面的代码中用取节点的方式去取出咱们想要的数据 git
这里至关因而在后端定义了/data接口,本地访问localhost:3000/data就能够访问到send回来的数组data。github
app.get("/data",(req,res)=>{
console.log("getData")
getData().then(data=>{
res.send(data)
})
});
复制代码
参考地址web
定义了静态文件后,能够在直接访问index.htm去请求接口,再根据数据去改变view。也能够将数据包装成本身想要的样子去render出本身的页面。express
app.use(express.static(path.join(__dirname, 'public')))
npm
app.listen(3000,()=>console.log("run 3000"))
项目比较简单,没有用webpack起项目,只用简单的静态去映射出爬取的数据。这是一个node爬虫入门的小demo,了解爬虫的基本原理。