html可以编写爬虫吗,JavaScript能写爬虫吗?

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。那么JavaScript能写爬虫吗?下面本篇文章就来给大家介绍一下。

acd6c1a7a06784d2a8ae62b7e2d3d98d.png

爬虫,大多人对于爬虫的理解都停留在使用后端语言如Python写的爬虫。当然这是在 nodejs 前了,nodejs的出现,使得Javascript也可以用来写爬虫了。

由于nodejs强大的异步特性,让我们可以轻松以异步高并发去爬取网站,当然这里的轻松指的是cpu的开销。

使用客户端JavaScript有诸多后端爬虫所无法拥有的优势:可以方便的分享给其他人用,只要对方电脑里有浏览器

由于跑在客户端,几乎可以无视对方网站的反爬虫机制

可以拥有完善的UI,无开发基础的小白也可以随意使用

下面就要说一下如何用nodejs做爬虫了

1、初始化项目文件

在对应的项目文件夹下执行npm init来初始化一个package.json文件

2、安装request和cheerio依赖包

request听起来很熟悉吧,跟python里request功能一样。它的功能就是建立起对目标网页的链接,并返回相应的数据,这个不难理解。

cheerio的功能是用来操作dom元素的,他可以把request返回来的数据转换成可供dom操作的数据,更重要的cheerio的api跟jquery一样,用$来选取对应的dom结点,是不很方便?对一个前端程序员来说,这比python的什么xpath和beautisoup方便了不知道多少啊哈哈

安装命令也很简单,分别是npm install request --save和npm install cheerio

3、引入依赖包并使用

接下来就用request和cherrio写一个爬虫吧!

首先引入依赖var request = require("request");

var cheerio = require("cheerio");

接下来就以爬取我们学校的新闻页为例吧,我们学校的新闻页面链接是http://news.shu.edu.cn/Default.aspx?tabid=446

然后调用request的接口request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){

if(err){

console.log(err);

}

console.log(result.body);

})

将request返回的结果传入cheerio中,并获得想要获取的信息request('http://news.shu.edu.cn/Default.aspx?tabid=446',function(err,result){

if(err){

console.log(err);

}

var $ = cheerio.load(result.body);

$('a[id^="dnn"]').each(function(index,element){

console.log($(element).text());

})

})

4、设置请求头

具体事例代码如下:var options = {

url: startUrl+'?page=1',

method: 'GET',

charset: "utf-8",

headers: {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",

"cookie": cookies

}

};

request(options,function(err,response,body){

//...

})

5、并发控制

爬取一个页面还好,要是页面多了就是无限制并发了,那肯定就要被封了,所以就要有一个并发控制,这里要介绍的就是async。跟上述一样要通过npm install async --save来安装并通过var async = require("async")来引入。

具体以一个限制并发的方式来示例一下async.mapLimit(5,function(url,callback)){

//...

fetch(url,callback)

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值