编写网页爬虫时,爬取 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. linux C++打包程序总结
  2. 上传文件到服务器指定目录,文件名相同自动替换PHP实现代码
  3. Redis 的性能幻想与残酷现实(转)
  4. Oracle Caused by: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect
  5. cloud_config学习_1
  6. iOS开发UI篇—APP主流UI框架结构
  7. 临时上传的文件-20170707
  8. 拓端tecdat|t-GARCH 模型的贝叶斯推断理论
  9. 顺序查找、折半查找、索引查找
  10. [开源项目]_[C++ CSDN博客下载-CSDN博客导出-CSDN博客备份工具]
  11. RDP Wrapper Library 之自己搞定rdpwrap.ini更新
  12. oracle的sqlplus命令讲解,SQL*PLUS使用 - Oracle sqlplus命令详解_数据库技术_Linux公社-Linux系统门户网站...
  13. Oracle 11g重要特性
  14. 移动端身份证识别,APP证件信息采集
  15. 分屏演示PPT,你可同时看见幻灯片备注信息
  16. mysql数据库的备份和恢复
  17. 基于SPI接口的OLED数据显示
  18. 避免重要数据泄露的8种方式
  19. 投CVPR过程中惊险的Rebuttal环节
  20. winform实现pictureBox显示成圆形形状,并实现pictureBox透明

热门文章

  1. 2022搜狐校园 情感分析 × 推荐排序 算法大赛 baseline
  2. Inkscape矢量抠图教程
  3. 企业级正规php第三方api,ThinkPHP新版企业级php第三方api第四方支付平台程序源码商业版 带接口文件等...
  4. ZooKeeper编程向导——源自官方文档
  5. 海外观察丨未来 10 大科技趋势预测全解读(下)
  6. 与计算机信息技术有关的课题,信息技术课题研究报告.doc
  7. 屠蛟之路_你的名字_FirstDay
  8. july:微软等公司数据结构+算法面试100题(第1-100题)首次完整亮相
  9. 0422 寻找数学口袋精灵BUG
  10. Cesium最新版使用天地图地形及注记服务