Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nodejs爬虫入门

nodejs爬虫入门

作者头像
用户1462769
发布于 2019-08-12 12:04:52
发布于 2019-08-12 12:04:52
1.4K00
代码可运行
举报
文章被收录于专栏:全栈者全栈者
运行总次数:0
代码可运行

喜欢作者请关注作者的别忘了关注作者哦,期待您的关注!

本篇从零介绍一下爬虫,使用的技术以nodejs为基础。

爬虫是什么?

简单直观的总结一下,把已经在网络上的内容,请求获取后解析,让杂乱的数据变得仅仅有条,挖掘更大的意义。google和百度背后的搜索引擎就是巨大的网络爬虫。


实现爬虫的工具

能发起http请求的工具,在nodejs中你可以选择http模块的request方法或者get方法,或者使用第三方包superagent网页解析数据筛选。网页数据解析工具,在nodejs中,可以通过cherrio或者jsdom两个第三方包完成。


注意完整版本的代码请在github获取:https://github.com/FantasyGao/About_Node/tree/master/clawer


下面用三种方式去实现

1. http.get+cheerio+iconv-lite

这种方式还是比较简单的,容易理解,直接使用http的get方法进行请求url,将得到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

需要注意的是得到的结果中文乱码,要用iconv-lite模块将得到的内容进行转码即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http.get(options,function(result){
  var body = [];
  result.on('data',function(chunk){
     body.push(chunk);
  });
  result.on('end', function () {
     var html = iconv.decode(Buffer.concat(body), 'gb2312');  //注意这里body是数组
     var $ = cheerio.load(html);
     ...
  });
});

2. request+cheerio+iconv-lite

这种方式在获取内容的方式上与上有些不同,可以直接获取到Buffer类型的数据。然后将得到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
request(options,function(err,res,body){
  if(err)console.log(err);
  if(!err&&res.statusCode==200){
     var html = iconv.decode(body, 'gb2312');     //这里body是直接拿到的是Buffer类型的数据,可以直接解码。
     var $ = cheerio.load(html);
     ...
  }
});

3. superagent+cheerio+superagent-charset

这种方式是比前面两个有较大差别,用了superagent的get方法发起请求,解码的时候用到了superagent-charse,用法还是很简单的,之后再将获取到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

这里中文乱码可以使用superagent-charset模块进行转码,方式较之上面有点差别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var charset = require("superagent-charset");
var superagent = charset(require("superagent"));   //将superagent模块传递给superagent-charset
...
superagent.get(url)
  .charset('gb2312')                                //用charset方法达到解码效果。
  .end(function(err,result){
     if(err) console.log(err);
     var $ = cheerio.load(result.text);
     ...
  });

总结一下

爬虫的实质就是发起请求,解析数据,无论用那个包,哪种方式都是一个目的。重在理解它要干什么,干了什么,怎么干的方式有很多种,其实nodejs并不适合去做这一类工作,只是为了学习使用它,像我们工作中更常用的是python去做爬虫自动化工作,相信大家理解了原理很快能上手。

如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。有什么问题请留言,会尽力回答之。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
node爬虫入门
这里只展示编写一个简单爬虫,对于爬虫的一些用处还不清楚,暂时只知道一些通用的用处:搜索引擎使用网络爬虫定向抓取网页资源、网络上面的某一类数据分析、下载很多小姐姐的图片(手动狗头)。
腾讯IVWEB团队
2020/06/29
5.5K0
如何判断页面编码
在编写微博爬虫的时候,稍微学习了一下网页编码的知识,主要来自于 W3C 官方文档的 5.2.2 小节。
李振
2021/11/26
1.4K0
Node.js抓取网站,GBK,GB2312中文乱码解决办法
我们以流的方式去请求网页,因为流都是二进制数据,当我们获取到所有的二进制数据后,将其以原网页的编码方式去解码即可!
切图仔
2022/09/08
2.1K0
驾校答题小程序实战全过程【连载】——4.题目采集与测试
由于没有数据,这次需要拿一些测试数据放到数据库。 这里想到本地采集,大家可以随意用任何后端语言,Python,PHP,Golang,Java,nodejs等等, 这里我就不用其他语言,使用接近JavaScript语法的,nodejs,采集后生成CSV文件。
大王12
2019/02/26
8090
Nodejs编写爬虫处理乱码详解
我们准备两个目标网站:第一个是网页编码格式为utf8的百度https://www.baidu.com/,如何查看目标网站的编码格式呢?只需要查看查看网页源代码就可以了,如图:
挥刀北上
2019/08/06
2.2K0
Nodejs编写爬虫处理乱码详解
python爬虫scrapy框架_nodejs爬虫框架
叮铃铃!叮铃铃!老师:“小明 你的梦想是什么?”, 沉思了一下 小明:“额额 我想有车有房,自己当老板,媳妇貌美如花,还有一个当官的兄弟” 老师:“北宋有一个人和你一样···”;
全栈程序员站长
2022/10/01
2.1K0
写爬小说的爬虫的一些心得
小说网站的页面内容编码用的 GBK,如果不做处理,中文内容会是乱码。解决方案是用 iconv-lite 来对内容用 GBK 的方式来解码。大概的写法:
前端GoGoGo
2018/08/24
6910
nodejs的简单爬虫
使用nodejs爬虫豆瓣电影数据,要爬取的页面地址:https://movie.douban.com/top250,简单实现如下: 'use strict'; // 引入模块 var https =
用户1141560
2017/12/26
1.2K0
【nodeJS爬虫】前端爬虫系列 -- 小爬「博客园」
写这篇 blog 其实一开始我是拒绝的,因为爬虫爬的就是cnblog博客园。搞不好编辑看到了就把我的账号给封了:)。 言归正传,前端同学可能向来对爬虫不是很感冒,觉得爬虫需要用偏后端的语言,诸如 php , python 等。当然这是在 nodejs 前了,nodejs 的出现,使得 Javascript 也可以用来写爬虫了。由于 nodejs 强大的异步特性,让我们可以轻松以异步高并发去爬取网站,当然这里的轻松指的是 cpu 的开销。 要读懂本文,其实只需要有 能看懂 Javascript 及 JQue
Sb_Coco
2018/05/28
1.6K0
爬虫爬取豆瓣电影top250
我想,爬虫对很多人来说是一个很有魅力的话题,它意味着不用什么努力就拿到了别人辛苦付出的的劳动成果。
一粒小麦
2019/07/18
1.2K0
爬虫爬取豆瓣电影top250
node爬虫实践总结
随着web2.0时代的到来,数据的价值愈发体现出来。无论是在目前火热的人工智能方向,还是在产品侧的用户需求分析,都需要获取到大量的数据,而网络爬虫作为一种技术手段,在不违反主体网站基本要求的情况下是获取数据成本最低的手段。与此同时,爬虫技术也飞速发展。
IMWeb前端团队
2019/12/04
1.4K0
nodejs cheerio模块提取html页面内容
本文给出使用一个用cheerio模块提取html文件中指定内容的例子,并说明具体步骤、涉及到的API、以及其它模块。 cheerio模块是一个类似jquery的模块,具有相似的API、功能,能够将一个网页解析为DOM,以及通过selector选择元素,设置、获取元素属性。
用户2176428
2022/05/11
3.5K0
nodejs cheerio模块提取html页面内容
Nodejs进阶:服务端字符编解码&乱码处理
本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 写在前面 在web服务端开发中,字符的编解码几乎每天都要打交道。编解码一旦处理不当,就会出现令人头疼的乱码问题。
IMWeb前端团队
2018/01/08
1.9K0
async和enterproxy控制并发数量
聊聊并发与并行 并发我们经常提及之,不管是web server,app并发无处不在,操作系统中,指一个时间段中几个程序处于已经启动运行到完毕之间,且这几个程序都是在同一处理机上运行,并且任一个时间点只有一个程序在处理机上运行。很多网站都有并发连接数量的限制,所以当请求发送太快的时候会导致返回值为空或报错。更有甚者,有些网站可能因为你发出的并发连接数量过多而当你是在恶意请求,封掉你的ip。 相对于并发,并行可能陌生了不少,并行指一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生),通过增加cpu
okaychen
2018/04/02
1.3K0
async和enterproxy控制并发数量
学习服务端JavaScript这个有名的Node.js
参照这个教程:https://github.com/alsotang/node-lessons/tree/master/lesson0
JQ实验室
2022/02/09
1.5K0
学习服务端JavaScript这个有名的Node.js
Node.js 小打小闹之爬虫入门
网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。此外爬虫还可以验证超链接和 HTML 代码,用于网络抓取。
阿宝哥
2019/11/05
1.1K0
如何利用node把别人的html变成你想要的json
相信作为一个移动端的老狗,当你遇到一个有内涵的网站的时候,而且当你发现里面有太多的噪音尤其是铺天盖地的 广告 的时候,你是不是有种想把它净化一下的感觉呢?比如来一个纯净版本的。
老码小张
2019/06/05
2K0
使用Nodejs获取自己所有的CSDN博客附源码与效果图
最近一直在想着做一个自己博客的数据统计。做数据统计,报表,必须要先有数据,于是写了一个使用Nodejs获取自己CSDN所有博客链接的程序, 并将这些博客数据通过页面展示出来。
拿我格子衫来
2022/01/24
6800
【Node.js】 bodyparser实现原理解析
也许你第一次和bodyparser相遇是在使用Koa框架的时候。当我们尝试从一个浏览器发来的POST请求中取得请求报文实体的时候,这个时候,我们想,这个从Koa自带的ctx.body里面取出来就可以了嘛!
啦啦啦321
2019/09/29
2.1K0
【Node.js】 bodyparser实现原理解析
用node撸一个简单的爬虫
一提起爬虫可能大家就会觉得很高大上,就会想起python.呵呵,我们今天偏偏就要颠覆大家的认知,用node不到100行代码擼一个简单的爬虫。天天python,我决定换下口味。
润森
2019/08/30
7240
相关推荐
node爬虫入门
更多 >
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入前端工作实战群
前端工程化实践 组件库开发经验分享
加入前端趋势交流群
追踪前端新趋势 交流学习心得
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档