使用nodejs实现简单爬虫
本人现在是一个大学的在校学生,所以可能写的不是很好,欢迎大家指正缺点,如果文章中有些不明白的或者不对的请在下方留言,写这篇文章的目的主要是为了深化和整理自己的知识,更是为了与各位相互交流共同进步。
1、node
1、Node.js是大神Ryan Dahl开发的,是一个基于Chrome V8 引擎的Javascript运行环境。
2、Node.js最初的定位是为了写服务器代码的,但是后来没有想到的是Node.js在前端领域大放光彩,如今Node.js在Web前端项目的构建与开发中有着举足轻重的地位。
3、node的下载也非常简单,在nodejs.cn中文网下载后傻瓜式下一步,就可以安装成功。
4、在很多项目中经常会遇到一些node版本问题,所以我个人比较建议安装nvm来管理多个node版本,这样就不需要在遇见node版本问题的时候,重复的卸载安装node了
5、下载node后我们可以打开cmd窗口输入node -v来查看node是否安装成功,如果出现版本号,就说明你已经安装成功了
6、node安装后建议在cmd窗口中输入以下代码,切换到淘宝镜像,这样可以使我们下载依赖更快,也可以下载yarn加快依赖包的下载速度,但是yarn有时可能会丢包
// 切换到淘宝镜像
npm config set registry https://registry.npmmirror.com
// 下载yarn,下载完成后输入yarn -v如果出现版本号,说明yarn已经下载成功
npm install -g yarn
2、初始化项目
我们随便创建一个文件夹,在文件夹中打开cmd窗口输入npm init后,一直回车就可以了
1、如果文件夹中出现了一个package.json文件,项目初始已经完成,但是为了便于我们的开发,这时我们可以下载一些成熟的依赖包来帮助我们开发。
2、我们继续在cmd窗口中下载我们所需要的依赖包,有yarn add与npm install两种下载方式:
- axios来发起http请求
- cheerio来便于我们获取HTML元素中的信息
- fs将我们获取到的数据写入本地文件中
// yarn的下载方式
yarn add axios
yarn add cheerio
yarn add fs
// npm的下载方式
npm install axios
npm install cheerio
npm install fs
3、使用axio抓取页面
一切准备就绪,我们就要开始编写js代码了
1、首先在创建的文件夹中新建一个js文件,并导入下载的模块包
2、我们使用axios向要爬取的网站发起一个get请求
const axios = require('axios'),
cheerio = require("cheerio"),
fs = require('fs');
//这里的url替换成你需要爬取的网页地址
const url = 'https://movie.douban.com/';
axios.get('https://movie.douban.com/').then(res => {
// res中有很多这个网页的信息,但我们这里只需要res.data
// res.data:当前网页HTML文件中的所有内容,但请注意这里的HTML是字符串
})
4、使用cheerio获取网页信息
1、cheerio是一个可以解析几乎任何 HTML 或 XML 文档的工具库。
2、cheerio的用法几乎与jQuery没有任何区别,可以有效的提高我们操作dom,从而从dom中提取我们需要信息。
const axios = require('axios'),
cheerio = require("cheerio"),
fs = require('fs');
//这里的url替换成你需要爬取的网页地址
const url = 'https://movie.douban.com/chart';
axios.get(url).then(res => {
// 解析HTML字符串,将其转化为我们可以操作的dom元素
const $ = res && res.data ? cheerio.load(res.data) : '';
let informationDataList = [];
$('.indent>div>table').each((i, item) => {
let obj = new Object;
obj.id = i;
obj.imgUrl = $(item).find('img').attr('src');
obj.title = $(item).find('.pl2>a').text();
obj.content = $(item).find('.pl').text();
obj.ratingNums = $(item).find('.rating_nums').text();
informationDataList.push(obj);
});
// informationDataList 存储我们需要的页面信息
})
4、使用fs将数据写入本地
fs模块我们最常用的就两个方法一个是读取readFile,另外一个就是写入writeFile
const axios = require('axios'),
cheerio = require("cheerio"),
fs = require('fs');
//这里的url替换成你需要爬取的网页地址
const url = 'https://movie.douban.com/chart';
axios.get(url).then(res => {
// 解析HTML字符串,将其转化为我们可以操作的dom元素
const $ = res && res.data ? cheerio.load(res.data) : '';
let informationDataList = [];
$('.indent>div>table').each((i, item) => {
let obj = new Object;
obj.id = i;
obj.imgUrl = $(item).find('img').attr('src');
obj.title = $(item).find('.pl2>a').text();
obj.content = $(item).find('.pl').text();
obj.ratingNums = $(item).find('.rating_nums').text();
informationDataList.push(obj);
});
// 这时候的 informationDataList 是一个数组集合
// 我们需要将这个数组集合转换为JSON字符串写入json文件中
informationDataList = JSON.stringify(informationDataList);
// 写入文件的路径地址
let fileName = './data.json';
fs.writeFile(fileName, informationDataList, err => console.log(err == null ? '写入成功!' : "写入失败"));
})
最后我们在cmd中使用node运行js文件,就成功了