资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

怎么用nodejs写一个代理爬虫网站

这篇文章主要介绍“怎么用nodejs写一个代理爬虫网站”,在日常操作中,相信很多人在怎么用nodejs写一个代理爬虫网站问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用nodejs写一个代理爬虫网站”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

成都创新互联公司是一家专业提供灞桥企业网站建设,专注与成都网站设计、网站制作、HTML5、小程序制作等业务。10年已为灞桥众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

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

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

怎么用nodejs写一个代理爬虫网站

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

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

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

爬虫的目标网站是这个小说网站:https://www.biquke.com。

网站页面是这样的:

怎么用nodejs写一个代理爬虫网站

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

怎么用nodejs写一个代理爬虫网站

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

怎么用nodejs写一个代理爬虫网站

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

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

怎么用nodejs写一个代理爬虫网站

打印结果如下:

怎么用nodejs写一个代理爬虫网站

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

1、小说的书名

2、小说的最新章节

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

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

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

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

怎么用nodejs写一个代理爬虫网站

打印结果如下:

怎么用nodejs写一个代理爬虫网站

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

怎么用nodejs写一个代理爬虫网站

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

怎么用nodejs写一个代理爬虫网站

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

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

怎么用nodejs写一个代理爬虫网站

模板代码如下:

怎么用nodejs写一个代理爬虫网站

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

请求首页地址结果如下:

怎么用nodejs写一个代理爬虫网站

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

怎么用nodejs写一个代理爬虫网站

代码地址如下: https://github.com/clm1100/spidertest

到此,关于“怎么用nodejs写一个代理爬虫网站”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网站题目:怎么用nodejs写一个代理爬虫网站
转载来于:http://cdkjz.cn/article/igdiph.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220