首页 > 编程语言 >node爬虫实践总结

node爬虫实践总结

时间:2023-04-11 12:02:43浏览次数:48  
标签:node 总结 const 请求 nodejs cheerio 爬虫 jsdom

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

随着web2.0时代的到来,数据的价值愈发体现出来。无论是在目前火热的人工智能方向,还是在产品侧的用户需求分析,都需要获取到大量的数据,而网络爬虫作为一种技术手段,在不违反主体网站基本要求的情况下是获取数据成本最低的手段。与此同时,爬虫技术也飞速发展。

了解爬虫,首先要了解一个君子协议。

node爬虫实践总结_获取数据

robot.txt协议

该协议是搜索引擎从业者和网站站长通过邮件讨论定下的,有几个重要的特点:

robot.txt协议是蜘蛛访问网站的开关,决定蜘蛛可以抓取哪些内容,不可以抓取哪些内容。

robot.txt是指网站与搜索引擎之间的协议

存放在网站根目录网站服务器的根目录下

nodejs爬虫

一提到爬虫,我们可能很容易联想到python,python由于其语法容易上手,操作数据简洁方便成为爬虫界的龙头,scrapy框架更是只用简单配置,按照其语法规范就能够轻松获取到网站内容。但是作为前端开发,获取数据就不可能了吗?当然不是,随着nodejs的出现,npm社区的火热,nodejs所提供的功能日渐强大,由于nodejs单线程支持高并发的特性,我们不必要将注意力过多放在线程之间的同步与通信,在加上JavaScript本身与html之间的紧密联系,使用nodejs进行网络爬虫也是很好的实践。

node爬虫工具

俗话说工欲善其事必先利其器,爬虫从根上说就是四个模块,网页下载器、网页解析器、URL调度器、内容输出器。

npm社区中为我们提供了很多有用的模块,接下来分别介绍下网络请求模块、解析模块以及流程处理模块。

网络请求模块

SuperAgent

SuperAgent 是一个轻量级、灵活的、易读的、低学习曲线的客户端请求代理模块,其使用极其简单,支持链式调用,可以很容易就封装成Promise或者async函数。

async function getOuterUrls(url) {
    return new Promise((resolve, reject) => {
        superagent.get(url)
        .end((err, docs) => {
            if(err) {
                return reject(err);
            }
            // 成功解析
            resolve(items);
        })
    })
}

request

request的使用也非常简单,request的设计是让http请求变得容易。

const request = require('request');
request('您的请求url', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // 请求成功的处理逻辑
  }
});

那么两者有什么区别呢,从npm社区中的统计量可以看出,request的周下载量有千万级,而superagent也有百万。superagent特别适合刚学爬虫的新手操作,请求中需要发送的参数以及请求头通过set直接设置。作者认为Request最强大的功能在于其CookieJar的功能,它能够保存每一次请求的cookie,让我们的请求和在浏览器中点击一样,我们甚至不用去设置每一次的cookie,他会根据请求的主机域从jar中自动匹配与实时更新。

const cookieColl = Request.jar();
const request = Request.defaults({jar: cookieColl});

资源解析模块

cheerio

我们都知道大名鼎鼎的jQuery,它提供了便捷轻量的dom操作语法。而cheerio是nodejs中的jQuery,上手方便,相比于xml解析的xpath简直好用一万倍。如果你熟悉jQuery,那么cheerio就能很容易玩转。

let $ = cheerio.load(docs.text);
   let items = [];
   $('#topic_list .topic_title').each((index, ele) => {
       let element = $(ele);
       items.push(Url.resolve(baseUrl, element.attr('href')))
   })

jsdom

JSDOM的目标是提供与浏览器一样的DOM环境

node爬虫实践总结_jar_02

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
console.log(dom.window.document.querySelector("p").textContent); // "Hello world"

jsdom相比于cheerio解析速度会稍慢,但是从npm社区的下载量来说,jsdom是cheerio的两倍,jsdom提供了其他丰富的功能,后续有待继续挖掘。

标签:node,总结,const,请求,nodejs,cheerio,爬虫,jsdom
From: https://blog.51cto.com/u_13488918/6182966

相关文章

  • node爬虫实践总结
    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。随着web2.0时代的到来,数据的价值愈发体现出来。无论是在目前火热的人工智能方向,还是在产品侧的用户需求分析,都需要获取到大量的数据,而网络爬虫......
  • pycharm中Git常见操作与问题总结
    1.问题Committeridentityunknown***Pleasetellmewhoyouare.Rungitconfig--globaluser.email"[email protected]"gitconfig--globaluser.name"YourName"tosetyouraccount'sdefaultidentity.Omit--globaltosettheidenti......
  • Python 爬虫框架 looter
    我们常用的pyspider,scrapy就不多介绍了,今天咱们玩looter框架的爬虫,其实爬虫很有意思,看看下面的代码就秒懂。安装先安装好python3,需要3.6以上,然后执行pipinstalllooterλlooter-hLooter,apythonpackagedesignedforwebcrawlerlovers:)Author:alphardexQQ:258......
  • 在浏览器和node中使用 GitHub的js-xlsx库进行Excel文件处理(一)
    1.简介js-xlsx库是目前Github上star数量最多的处理Excel的库,功能强大,提供了各种对表格的操作,但是这个项目文档有些乱,提供的demo也只具备最基本的功能。Demo地址:http://oss.sheetjs.com/js-xlsxGithub上源码地址:http://git.io/xlsx支持解析的格式有:Excel2007+XML......
  • 见sql问题总结四
    --查询各个课程及相应的选修人数;SELECTaa.cid,aa.cname,bb.numFROM(SELECTcid,cnameFROMcourse)aaINNERJOIN(SELECTCOUNT(student_id)asnum,corse_idFROMscoreGROUPBYcorse_id)bbonaa.cid=bb.corse_id--查询不同课程但成绩相同的学生的学号、课程......
  • 程序员下班做什么副业好?实战方法新手小白可上手!1000多字总结
    以前我就是个程序员,所以,现在有做副业的想法是很不错的,可以多点收入,而且以下方法即使不是程序员,新手小白也可以干。我来分享一下做副业的经验和看法;现在我已经往运营方向发展了。作为一个网站开发工程师,我在上家公司干了3年的活,做过javaweb,前端html、js、css,asp.net we......
  • Linux 命令总结
    基本命令uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件(SMBIOS/DMI)hdparm-i/dev/hda罗列一个磁盘的架构特性hdparm-tT/dev/sda在磁盘上执行测试性读取操作系统信息arch显示机器的处理器架构uname-m显示机器的......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能聊天机器人从0到1快速入门——官网推荐的
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 2023.4.10每日总结
    今天在课堂上未能成功完成老师布置的任务,之后在宿舍一整晚茶不思饭不想的一直在进行编程。在分页上没有遇到太大困难,但在添加条件查询之后就有点难以处理。明天一定会完美完成建民老师的这次课堂小测......
  • 4.10今日总结
    今天学习了分页功能<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=&qu......