用js爬虫,使用到nodejs

例子中爬取的是中国新闻网时政频道的最新10条新闻的title和链接

事先准备:

1、先去node官网下载安装一下
2、推荐vs code,需要通过终端下载插件,不想的话用cmd小黑框做终端,记事本写代码也行。

开始

1、新建文件夹,注意该文件夹名字不能包含中文
2、代码:

const request =  require('request');//
const iconv = require('iconv-lite');//设置编码格式
const Cheerio = require('cheerio');

//封装成函数
const requestPromise = (url) =>{
	return new Promise((resolve, reject) =>{
		//先取消原有的编码格式
		request(url, {encoding:null},function (error, response, body) {
			if(response.statusCode == 200){
				//如果原网页编码格式有问题,可以转成ubt8格式的,该括号内utf-8为原网页编码格式(演示使用)
				const bufs = iconv.decode(body, 'utf-8');
				const html = bufs.toString('utf-8');//转成utf-8
				// console.log(html);
				resolve(html);
			}
			else{
				reject(error);
			}
		});
	})
}
const url = 'https://www.chinanews.com.cn/china/';  //.news_list_ulbox ul li div div div:nth-child(1) em a
requestPromise(url).then(res => {
	const $ = Cheerio.load(res);//成功后用cheerio加载
	$('.news_list_ulbox ul li div div div:nth-child(1) em a').each((i, item) => {
		console.log($(item).text());
        console.log('https://www.chinanews.com.cn/'+$(item).attr('href'))
	});
});

注:其中nth-child可参考nth-child和nth-of-type的区别,为当前选中的元素(div)下的同级子元素的第n个元素,其中非div类型也参与排序,nth-of-type则非div类型不参与排序

3、以下操作在vs code的终端,或者cmd切换到文件夹目录下执行都可
先初始化一下项目,运行后文件夹出现一个package.json文件

npm init -y

安装requesticonv-litecheerio等插件

npm install request --save
npm install iconv-lite --save
npm install cheerio --save

安装完成后package.json文件内容
在这里插入图片描述
4、node 文件名运行
这是运行成功图片,包含网址url被屏蔽了。。
在这里插入图片描述

总结

其实就是request获取页面的html元素 + cheerio分析html,来获取一些固定的标签的内容或者标签的url等值。

如何将爬虫获得的数据自动部署在自己的动态网页中?

懒得出来了,思路如下:
简单点可以通过node来连接数据库,将爬取的数据存入数据库中
但是不能实时获取。。
可以通过bat来设置每秒用node运行一次js文件,下面代码保存为bat格式

@echo off
:loop
	node js文件名
	call :delay 1000
goto loop

:delay
echo WScript.Sleep %1>delay.vbs
CScript //B delay.vbs
del delay.vbs

然后网页获取数据库的数据,就行了
(但还是推荐直接py或者java爬虫,然后直接写入动态网页里面)
用js这样子获取得有个前提:有个云服务器(不过好像部署网页都得有一个?)
实测这样运行的话其实也占不了多少云服务器的资源
在这里插入图片描述

另:若是Linux系统
bat文件为

for((i=0;i<10;))
do
sleep 2
node news_china.js
done

然后用nohup挂起,防止关闭终端后杀死进程
nohup bat文件路径 &
nohup命令使用

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐