为了账号安全,请及时绑定邮箱和手机立即绑定

精通Node爬虫-02-听说你想写爬虫

本文食用前准备:什么都不需要

前言

在写这篇文章之前,我悄咪咪地在百度搜索“爬虫”这个词,在第一页居然没有Node这个关键词,绝大多数是Python爬虫,很容易让想学爬虫的萌新觉得只有Python能写爬虫。关于这个问题我已经在精通Node爬虫-01-给门外汉说明白什么是爬虫中给出了答案。这次讲讲Node爬虫是怎么一步一步实现的,虽然没有实现代码,但绝对干货。

首先你得准备好工具

要写爬虫,首先要有一个趁手的浏览器了,为了方便调试和使用插件,Chrome浏览器肯定是首选了。不是看不起其他浏览器,只是因为Chrome有个插件调试请求超级方便。

Postman :一款功能超级强大的用于发送 HTTP 请求的 Chrome插件 。做web页面开发和测试的人员应该是无人不晓无人不用!其主要特点 特点: 创建 + 测试:创建和发送任何的HTTP请求。详细的使用方法可以看秋名山车神的爬虫课程,讲的超级详细,声音还好听。

Node环境和Node模块

  • request:用来请求网络数据的模块
  • cheerio:请求到数据后,如果是HTML文本,这个模块能像写jQuery一样操作DOM,这样子就不用手动写正则来提取数据了。
  • lodash:lodash应该每个写node的人都知道这个工具模块,可以少写很多工具代码。

其他:一个写代码很方便的编辑器,我用的是vscode。

写代码前的工作

用Chrome浏览器,可以不用写代码就能做一些网页的访问测试。

确定数据的类型

我们要抓取一个网页的数据前,最先做的不是写代码,而是对访问的网页进行分析,确定访问数据的类型属于那种。

用chrome自带的检查功能,对网页的请求数据进行初步的定位,毕竟不是每个网页都做了XHR类型的数据,最直接的体现还是返回一个HTML,当然也有可能异步拉取的数据。定位的优先级如下

  1. 先查看xhr里面时候有我们想要的数据,因为这种数据一般都是JSON格式的,无需我们做太多的处理就能存数据库。
    2 当我们发现XHR里面没有想要的数据时,就要看URL返回的HTML网页是否显性的包含想要的数据。
  2. 如果不是显性的数据,可能这个数据是异步拉取的,然后填充到HTML中,这时候就要看HTML中的JS代码,是不是存在异步请求代码,可以模仿代码请求数据。

当然以上三个方式不是全部的网页数据拉取方法,还有一些加密的websocket和浏览器解密的方法阻止爬虫获取明文数据。但是大部分网页基本上这三种方式都能找到数据来源。

伪装成浏览器的headers信息要是很重要的

做完上面的还不能写代码,因为浏览器访问是携带很多headers字段的,比如:cookie。所以当你写代码的时候可能不能回被对方服务器鉴定为不符合要求的请求从而不给你返回预期的信息。

所以我们要清楚postman测试我们拿到的url是否需要一些头部信息才能正确访问到预期数据,postman使用方法找秋名山车神的教程,毕竟文字讲解不如视频来的直接,方便和易懂。

正式码代码

当我们把前面一切都做完后,最最最轻松,也是最重点的事情就是写代码实现爬虫了。之所以说最轻松,是因为爬虫其实难是难在如何正确的请求数据和定位想要的数据,代码是最简单的一环,只是请求到数据,并保存到预期的位置。之所以重要,是因为如果没有代码实现,没不会有爬虫程序被写出来,那请问用什么爬数据呢?

代码的实现逻辑其实超级简单,这里就不贴任何代码了,因为只需要经过下面的步骤就能完成,具体的代码实现下篇文章开始展示。
1、用request请求url,获取到返回结果
2、如果返回的数据是JSON格式,经过一次简单的数据清洗,或者转换成想要的格式即可保存。
3、如果数据是HTML格式,使用cheerio模块选出需要的数据,当然你也可以选择写正则提取数据,转换成想要的格式即可保存。
4、然后就没有然后了。

最后说点什么

上面就是爬虫的实现过程,大家可能会发现真正实现简单爬虫代码的时间,其实也就短短的几十分钟或者几个小时,而在此之前,却要做大量的工作去定位数据,确定请求方式和请求携带信息。这个逻辑其实也适用于其他语言开发的爬虫,希望大家看完这篇文章后再去看慕课网的爬虫教程,能更清晰的知道老师花很长时间将与代码无关的知识是为了什么。鉴于现在网络上关于Node爬虫教程这么少,下一篇应该会给大家用Node从头到尾实现一个简单的爬虫,讲解Node代码的含义(虽然我觉得很没必要,可是考虑到可能会有想学Node的小伙伴,就多此一举吧)。

最后假装很正经的贴上上一次的声明,这个声明是秋名山车神那里抄的,在此谢谢车神。

声明:

本系列文章原创于慕课网,作者布宝,任何人不得以任何形式在不经作者允许的情况下,进行任何形式的印刷以及销售,转载需注明出处及此声明。

对文章有任何问题请在下面留言,我会不定期的回复大家。

人非圣贤,如果文章有错别字请大家自行区分或指正出来,我将不定期修改错误的地方。

本系列能否持久更新下去离不开大家的支持与鼓励,以及对原创版权的尊重。

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JS工程师
手记
粉丝
9582
获赞与收藏
319

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消