用nodejs写一个代理爬虫网站

nodejs有很多用途,除了操作文件和做web开发之外还可以做爬虫,今天就用简单的几行代码给大家演示一下,如何用nodejs实现一个代理爬虫。

代理爬虫的原理主要应用了代理服务器和爬虫,如图所示:

程序的主要逻辑在代理服务器里面,转发请求,爬取数据,处理数据。

这里应用的技术栈包括:express、axios、cheerio、art-template

用express来创建一个web服务,axios爬取网页,cheerio处理数据、art-template渲染数据。

爬虫的目标网站是这个小说网站:。

网站页面是这样的:

为了简单咱们只演示爬取其中一本小说,凡人修仙传/bq/0/990/,页面如图:

第一步、首先咱们先用express来构建一个web服务器,代码如图:

回顾上面的代码,咱们设计1个路由,展示凡人修仙传的目录页面。

第二步、用axios请求目标页面,axios这个库前后端都可以用,当在浏览器中使用时其内部调用的XMLhttprequest对象发送异步请求,当在node端也就是后端使用时其调用的是node的http模块的request方法。代码如下:

打印结果如下:

仔细观察结果,这个结果就是一段html格式的字符串,这些字符串中包含这凡人修仙传这本小说的内容,我们要获取如下信息:

1、小说的书名

2、小说的最新章节

3、小说的章节列表和每一章的链接

如何获取这些信息呢?难道要用正则表达式来筛选吗?当然不是。

第三步、处理数据获取想要得到的数据,这里我们需要熟悉一个处理页面数据的npm包,cheerio,包的地址:

来看一下官网文档,看一下这个包的用法。代码如下:

打印结果如下:

从以上结果我们可以看出cheerio的作用就是将html结构的字符串转换成类似jquerydom对象的一种格式,然后用jquery的选择器筛选想要获得的数据,明白了以上用法,我们就可以继续往下进行了,处理数据,代码如下:

浏览器端发送求,在终端查看打印结果:

以上便得到了我们想要的数据,只有结果不是咱们最终结果,我们希望将数据渲染成页面返回给用户这里就用到了art-template。

第四步、用art-template将数据渲染成页面,代码如下:

模板代码如下:

注意列表在渲染的时候每一章的a标签链接的处理方式。

请求首页地址结果如下:

以上只是目录页的实现方式,接下来每一章的详情页,这里需要注意,详情页路由再设计的时候,我们设置了一个params的请求参数,通过这个参数,我们可以拼接处用户请求的是那一章的数据,从而去处理数据。代码如下:

代码地址如下: 

以上便是代理爬虫的简单实现,这个爬虫大家可以更深入的开发一下,比方说假如数据库,而不是应用代理,然后定时去爬去目标网站,更新数据库的信息,等等,欢迎大家留言。

欢迎大家扫描下方二维码,关注nodejs全栈开发