用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/。
用Nodejs做一个简单的小爬虫的更多相关文章
- 今天来做一个PHP电影小爬虫。
今天来做一个PHP电影小爬虫.我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们利用php解析html文档.通过 ...
- 做一个简单的scrapy爬虫
前言: 做一个简单的scrapy爬虫,带大家认识一下创建scrapy的大致流程.我们就抓取扇贝上的单词书,python的高频词汇. 步骤: 一,新建一个工程scrapy_shanbay 二,在工程中中 ...
- 用Python做一个简单的小游戏
学习总是枯燥的,对于Python小白的我来讲,更是乏味的.为了提高学习的兴趣,今天我就来写一个小程序练练手. 数字猜谜游戏相信大家都不陌生,A给出最小值最大值,B写一个该范围内的数,A猜测写下的是多少 ...
- 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)
打开py的IDLE >>>import urllib.request >>>a=urllib.request.urlopen("http://www.ba ...
- nodejs实现一个简单的爬虫
nodejs是js语言,实现一个爬出非常的方便. 步骤 1. 使用nodejs的request模块,获取目标页面的html代码:https://github.com/request/request 2 ...
- 用nodejs搭建一个简单的服务监听程序
作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
- 使用React并做一个简单的to-do-list
1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...
- 用nodejs搭建一个简单的服务器
使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...
随机推荐
- get和post提交数据的区别
get是客户端向服务器索取数据的请求,设定的初衷是,客户端(浏览器)给服务器发送请求,然后服务器再返回给客户端其要求的数据. 那么为什么说get也能提交数据呢? 我们仔细理解第一句话“客户端(浏览器) ...
- sql查询优化整理
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- hosts文件原理
hosts文件是一个用于储存计算机网络中各节点信息的计算机文件.这个文件负责将主机名映射到相应的IP地址.hosts文件通常用于补充或取代网络中DNS的功能.和DNS不同的是,计算机的用户可以直接对h ...
- Eclipse中启动tomcat时内存溢出
今天在启动自己项目的时候遇到一个永久带(permgen space)内存溢出,查找了很多资料和请教了许多大神,最终才解决问题. 一.什么原因造成了永久带溢出: 1.项目使用了太多的静态变量 2.加载了 ...
- 搭建腾讯云Linux服务器(Centos6)入门教程
搭建腾讯云我们需要准备WinSCP,支持文件上传和下载的客户端,界面操作,很方便快捷,有这个可以不用搭建SVN哦! SecureCRT 7.3,这个是很不错的Linux远程客户端哦,可以去CSDN下载 ...
- 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...
- Java Date Classes
References: [1] http://tutorials.jenkov.com/java-date-time/index.html [2] https://docs.oracle.com/ja ...
- SpringBoot系列(一)RestTemplate
作为springBoot的开篇系列,RestTemplate只能表示我只是个意外 what RestTemplate是spring提供的用于访问rest服务的客户端(其实类似Apache的HttpCl ...
- 基于Android的上课助手的概况及第一周冲刺详情
基于Android平台的上课助手 一. 功能简介 课表查询 课程提醒 空闲教室的查询 二. 开发环境 Android 三. 开发成员 组长:李志岩 成员:王亚蕊.孙 ...
- redis入门指南-附录B