用Nodejs做一个简单的小爬虫
Nodejs将JavaScript语言带到了服务器端,作为js主力用户的前端们,因此获得了服务器端的开发能力,但除了用express搭建一个博客外,还有什么好玩的项目可以做呢?不如就做一个网络爬虫吧。据说互联网上的流量90%以上都是爬虫贡献的,不知道真假,但起码证明了,爬虫是一种用途广泛的东西,尤其在电商比价领域,整个就是爬虫的技术较量,当然我要做的是爬虫中的弱鸡,只实现基本功能,先上源码。
下面简述一下实现过程。首先挑选爬取对象,这里选择的也是门槛比较低的新闻站cnBeta.com,因为每天上午都要去逛一逛,比较熟悉,为什么说新闻站比较简单呢,因为通常这类网站不要求用户登录,所有爬虫的请求很容易伪造。
爬虫的基本思路是,获取页面->构造信息选择器->分析页面链接->获取相邻页面->循环第一步,对于新闻站来说,我们要获取的就是新闻内容啦,请求到页面html代码后,只要从页面中找到内容容器元素就很容易获取到新闻内容,下一步是获取相邻页面的地址,cnBeta新闻是有上一页下一页链接的,但仔细观察会发现其实使用js动态生成的,这里需要找出js是如何获取到链接的,拿到链接我们就继续获取下一篇新闻的html代码,周而复始。
期间肯定不会一帆风顺,比如就遇到了301跳转,好在从请求头中很容易找到了跳转目标,发现301跳转后立即放弃请求重新请求跳转地址就好了。
另外,爬虫不能无限制的爬取,否则很容易被封IP,需要设置一个爬取条数的限制。最好再做一个爬取间隔的设置,但这里只用作学习Nodejs,不会大量的爬取,因此也就没必要做爬取间隔了。
详细的分析过程见另一篇文章:http://refined-x.com/2017/06/09/Nodejs%E7%88%AC%E8%99%AB%E5%AE%9E%E8%B7%B5%E5%B0%8F%E8%AE%B0/。