egg.js爬取百度图片
每天浏览大量的文章,看起来我不想写那些接口,脑瓜疼。
我今天下手的是百度图片,,,eggjs用起来很方便,egg.js实现了一个小小的爬虫,
首先搭建起来egg--->详情看egg.js文档,这里我就不再写安装egg了
congfig.default.js配置模块中写上:
//配置公共的url
config.api = "http://image.baidu.com/channel/listjson?pn=0&rn=30&tag1=%E7%BE%8E%E5%A5%B3&tag2=%E5%85%A8%E9%83%A8&ftags=%E7%BE%8E%E5%A5%B3##%E5%86%85%E5%9C%B0&ie=utf8";
return config;
路由模块:
router.get('/news', controller.news.news);
新建service,用来写爬虫抓取数据:
'use strict';
const Controller = require('egg').Controller;
class NewsService extends Controller {
async getNewsList() {
//抓取数据接口
const ctx = this.ctx;
const result = await ctx.curl(this.config.api, {
// 必须指定 method
method: 'POST',
// 通过 contentType 告诉 HttpClient 以 JSON 格式发送
contentType: 'json',
data: {
},
// 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
dataType: 'json',
});
var res = result.data;
return res;
}
}
module.exports = NewsService;
控制器中的news:
'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
async index() {
var list = await this.service.news.getNewsList();
this.ctx.body = list;
// await this.ctx.render("index",{
// list:list
// })
}
async news(){
await this.ctx.render("index")
}
}
module.exports = NewsController;
注意我在上面安装了模板插件, egg-view-ejs 不过我没有用上,我在前台处理了,,哈哈哈
前台代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
img{
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<div>
</div>
</body>
<script src="/public/jquery.min.js"></script>
<script>
$.ajax({
url:"/",
success:function(res){
var data = res.data;
for(var i = 0; i<data.length; i++){
if(data[i].download_url == undefined){
return;
}
$("div").append(` <img src="${data[i].download_url}" alt="">`);
}
}
})
</script>
</html>
小生技术有限,,,最近在学习egg.js发现很有趣,所以就写了一个小小的爬虫,希望大佬们点个赞,
效果: