NodeJS爬虫微博热搜
一、安装node,并下载依赖
去node官网nodejs.org/zh-cn/下载node node-v查看版本号
二、搭建服务
demo.js
npm install express 安装依赖
// 引入express
const express = require('express');
const app = express();
app.get('/index', function(req, res) {
res.end('爬虫')
})
var server = app.listen(8081, function() {
var host = server.address().address
var port = server.address().port
})
三、请求我们要爬取的页面,返回json
请求我们要爬取的页面
npm install superagent
npm install superagent-charset
npm install cheerio
superagent 是用来发起请求的,是一个轻量的,渐进式的ajax api,可读性好,学习曲线低
内部依赖nodejs原生的请求api,适用于nodejs环境下,也可以使用http发起请求
superagent-charset防止爬取下来的数据乱码,更改字符格式
cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.。 安装完依赖就可以引入了
var superagent = require('superagent');
var charset = require('superagent-charset');
charset(superagent);
const cheerio = require('cheerio');
请求地址:https://s.weibo.com/top/summary
完整代码:
var superagent = require('superagent');
var charset = require('superagent-charset');
charset(superagent);
var express = require('express');
const cheerio = require('cheerio');
var app = express();
app.get('/index', function(req, res) {
//设置请求头
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type');
//类型
var type = req.query.type;
//页码
var page = req.query.page;
superagent.get('https://s.weibo.com/top/summary')
.charset('utf-8')
.end(function(err, sres) {
var items = [];
if (err) {
console.log('ERR: ' + err);
res.json({ code: 400, msg: err, sets: items });
return;
}
var $ = cheerio.load(sres.text);
$('div.data table tbody tr td.td-02').each(function(index, element) {
var $element = $(element);
var $a = $element.find('a');
items.push({
top: index+1,
title:$a.text(),
href: $a.attr('href'),
// thumbSrc: thumbImgSrc
});
});
res.json({ code: 200, msg: "", data: items });
});
});
var server = app.listen(8081, function() {
var host = server.address().address
var port = server.address().port
})
node index.js 启动服务
输入url
返回数据: