基于Node实现爬虫程序抓取百度热搜数据

技术栈

下面是本案例使用的开发环境与模块:

  • Node.js:作为爬虫程序的开发环境
  • request:用于发送HTTP请求的模块
  • cheerio:用于解析DOM
  • iconv-lite:用于解析数据的编码

案例描述

使用Node.js实现一个简单的爬虫程序,抓取百度热搜的数据,抓取的网站地址:
http://top.baidu.com/buzz?b=1&c=513&fr=topbuzz_b341

效果图如下:
基于Node实现爬虫程序抓取百度热搜数据_第1张图片

案例准备

创建项目的根目录,例如 d:\myapp ,在根目录下启动命令行工具,执行以下命令:

# 初始化
npm init -y

# 安装模块
cnpm i request cheerio iconv-lite --save

代码示例

myapp 目录下创建 index.js 文件,具体代码如下:

const request = require('request')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')

//发起请求
request({
     
	encoding: null,
	url: 'http://top.baidu.com/buzz?b=1&c=513&fr=topbuzz_b341'
},function(error,res,body){
     

	//获取HTML代码的字符串,使用iconv-lite解决乱码问题
	var html = iconv.decode(body,'gb2312').toString()

	//解析DOM,获取超链接数据对象
	let data = setDatas(html)
	//打印数据
	console.log(data);
})


//解析DOM数据的函数
function setDatas(html){
     
	//用于存放对象
	let datas = []

	//使用cheerio解析
	var $ = cheerio.load(html)
	var table = $('table.list-table').children()

	//遍历table标签的子元素
	table.each(function(index,element){
     
		//获取所有带有标题的a标签
		let a = $(this).find('a.list-title')

		//遍历所有的a标签
		a.each(function(){
     

			//获取所有a标签上的href和title属性
			let href = $(this).attr('href')
			let title = $(this).text()

			//把数据追加到数组中
			datas.push({
     
				title,
				href
			})

		})
	})

	return datas
}

代码编写完成后,在命令行工具中执行:

node index

即可打印数据:
基于Node实现爬虫程序抓取百度热搜数据_第2张图片

你可能感兴趣的:(Web全栈案例,node.js,request,爬虫,cheerio,iconv-lite)