关注“重度前端”
助力前端深度学习
━━━━━
前言
以前觉得爬虫之类的服务只能后端实现,不过我们有nodejs,这个事儿fe也能干了。今天就写个简单爬虫玩玩。
为什么选择利用node来写爬虫呢?就是因为cheerio这个库,全兼容jQuery语法,熟悉的话用起来真真是爽
依赖选择
cheerio: Node.js 版的jQuery
http:封装了一个HTPP服务器和一个简易的HTTP客户端
iconv-lite:解决爬取gb2312网页出现乱码
初步实现
既然是要爬取网站内容,那我们就应该先去看看网站的基本构成
分析页面
页面结构如下:
我们可以看到每个电影的标题都在一个class
为ulink
的a
标签下,再往上定位,我们可以看到最外部的盒子class
为co_content8
ok,可以开工了
获取一页电影标题
首先引入依赖,并设定需要爬取的url
var cheerio = require('cheerio');
var http = require('http');
var iconv = require('iconv-lite');
var url = 'http://www.ygdy8.net/html/gndy/dyzz/index.html';
核心代码 index.js
http.get(url, function(sres) {
var chunks = [];
sres.on('data', function(chunk) {
chunks.push(chunk);
});
// chunks里面存储着网页的 html 内容,将它zhuan ma传给 cheerio.load 之后
// 就可以得到一个实现了 jQuery 接口的变量,将它命名为 `$`
// 剩下就都是 jQuery 的内容了
sres.on('end', function() {
var titles = [];
//由于咱们发现此网页的编码格式为gb2312,所以需要对其进行转码,否则乱码
//依据:“<meta http-equiv="Content-Type" content="text/html; charset=gb2312">”
var html = iconv.decode(Buffer.concat(chunks), 'gb2312');
var $ = cheerio.load(html, {decodeEntities: false});
$('.co_content8 .ulink').each(function (idx, element) {
var $element = $(element);
titles.push({
title: $element.text()
})
})
console.log(titles);
});
});
运行node index
结果如下
成功获取电影title,那如果我想获取多个页面的title呢,总不可能一个一个url去改吧。这当然有办法,请看下一期!
总结
还没写完,咱就不总结了。内容浅显易懂,仅供初学者参考,不过也不妨碍给咱点个赞。据说爱学习的fe都爱点赞。
重度前端--助力深度学习
为web前端同行提供有价值、有深度的技术文章
官网:http://bigerfe.com【建设中】
长按二维码关注我