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();
![](https://user-gold-cdn.xitu.io/2019/3/4/16946c12f810faeb?w=1838&h=438&f=png&s=416121)
//定義要抓取數據的頁面地址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,瞭解爬蟲的基本原理。