编写网页爬虫时,爬取 html 页面是基本功能。在 Node.js 中,只需借助内置的 http 模块,即可实现一个网页下载器,代码如下:

const http = require('http')
const https = require('https')
const iconv = require('iconv-lite')
const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'function isRedirect(code) {return code === 300 || code === 301 || code === 302 || code === 303 || code === 305 || code === 307 || code === 308
}/*** 网页下载器* @param {string} url - 网页的网络地址* @param {number} timeout - 超时时间,默认 1 分钟* @param {number} retries - 重试次数,默认重试 2 次;为 0 时,不支持重试* @param {number} redirect - 支持重定向次数,默认重试 5 次;为 0 时,不支持重定向* @return promise*/
module.exports = function htmlDoanloader(url, timeout = 60 * 1000, retries = 2, redirect = 5) {return new Promise(function (resolve, reject) {function wrapper (url, timeout, retries, redirect) {let request = url.startsWith('https') ? https.request : http.requestlet req = request(url, res => {let buf = [], size = 0 if (isRedirect(res.statusCode) && 'location' in res.headers && redirect > 0) {wrapper(res.headers.location, timeout, retries, redirect - 1)return}res.on('data', (chunk) => {buf.push(chunk)size += chunk.length})res.on('end', () => {resolve(iconv.decode(Buffer.concat(buf, size), 'utf8'))})})req.setHeader('User-Agent', userAgent)req.setTimeout(timeout, () => {retries--req.abort()})req.on('error', (err) => {retries > 0 ? retries-- : reject(err)})req.on('close', () => {// 重试时,将超时时间递增 1 分钟if (retries > 0) wrapper(url, timeout + 60 * 1000, retries, redirect)})req.end()}wrapper(url, timeout, retries, redirect)})
}

随着 Node 直接支持 async await,异步编程的复杂度大为简化,并且更直观。因此,上述代码使用了 Promise,方便在 async function 中拿到下载的页面字符串,以便后续进行分析。

有了上述网页下载器(htmlDownloader.js),只需循环遍历网页地址,即可实现批量网页下载,而下载网页是为了从中抽取需要的数据,这里不再展示如何批量下载网页,下一篇将展示如何用 cheerio 从网页抽取数据。

转载于:https://my.oschina.net/junyiz/blog/1615793

Node爬虫:批量下载网页相关推荐

  1. python爬虫批量下载“简谱”

    python讨论qq群:996113038 导语: 上次发过一篇关于"python打造电子琴"的文章,从阅读量来看,我们公众号的粉丝里面还是有很多对音乐感兴趣的朋友的.于是,今天我 ...

  2. python之批量下载网页数据

    python之批量下载网页数据 要下载如下网页所示数据,一个一个点下载繁琐,我们用python代码来批量下载. python代码: import urllib.request # url reques ...

  3. 简单python网络爬虫批量下载视频

    寒假闲来无事,决定尝试一下用python写一个小网络爬虫批量下载视频. 由于是第一次写网络爬虫,可以说是两眼一抹黑,整个程序都是自己一点点试出来的,所以程序本身肯定有一些漏洞和缺陷,如果有建议请批评指 ...

  4. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载音乐飙升榜并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是 ...

  5. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  6. python 批量下载 代码_Python + Selenium +Chrome 批量下载网页代码修改

    Python + Selenium +Chrome 批量下载网页代码修改 主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt 来达到在登陆状态下 批量打开并下载网 ...

  7. python webdriver save_Python + Selenium +Chrome 批量下载网页代码修改【新手必学】

    Python + Selenium +Chrome 批量下载网页代码修改 主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt 来达到在登陆状态下 批量打开并下载网 ...

  8. 新一配:perl循环调用python爬虫批量下载喜马拉雅音频

    新一配:perl循环调用python爬虫批量下载喜马拉雅音频 手机下载喜马拉雅音频后,获得的音频文件虽然可以转成mp3格式,但其文件名却是一长串字符串,无法辨别是哪一集,网上找了各种工具,都有局限性, ...

  9. Excel功能强大到可批量下载网页的PNG格式图片

    今天啊,我们要通过Excel来演示一下,批量下载网页上png格式图片的操作. (方方格子插件) 1.先看动图演示吧 2.首先我们需要打开excel的操作界面. ​ 3.然后我们需要选择复制具有网页图片 ...

最新文章

  1. 瞎聊Spring Cloud
  2. 卧槽,又一个Java面试神器!!!
  3. C++知识点13——友元,类的声明
  4. php抽象的案例,php抽象类和抽象方法的例子
  5. 敏捷与DevOps整合之道
  6. maven aspectj_使用Spring AspectJ和Maven进行面向方面的编程
  7. 一入web前端深似海
  8. ORACLE PL/SQL 实例精解之第二章 通用编程语言基础
  9. php将中文编译成字符串,PHP将汉字字符串转换为数组
  10. token会被截取吗_新手剪辑:如何截取视频的某个片段?
  11. 移动硬盘插电脑上驱动感叹号_如何通过移动驱动器向手机或平板电脑添加额外的存储空间...
  12. 软件推荐——Modbus调试工具Modbus Poll与Modbus Slave
  13. PDMS Pipeline Tool 教程(四):目录树顺序检查
  14. 最新版UI视频解析单页源码附带超清接口
  15. 关于字体的px和pt
  16. Python-Pandas-Excel/CSV 数据处理大全整理 (二)
  17. ResNet解析(二)
  18. 服务器(工作站)与普通电脑的区别?
  19. Delphi中BeginUpdate和EndUpdate作用
  20. 最牛训犬师,专治拆家打架咬人,20多年搞定2000多条狗

热门文章

  1. java 过滤微信昵称_JAVA微信开发-如何保存包含特殊字符的微信昵称
  2. 为JAVA献上美好祝福
  3. nohup命令执行退出后进程退出
  4. 自建SMTP服务器完成发信,垃圾邮件拦截相关域名处理
  5. 【CompletableFuture模拟真实场景之性能优化】
  6. 分布式压力测量项目分享
  7. XP系统目录服务器恢复模式,WinXP高级启动选项功能介绍
  8. 《跟我学算法系列文章——一文学会数据结构套路》
  9. 新零售系统服务商帮助品牌打通线上线下,实现销售额增长
  10. flash音乐播放器 制作教程