Nodejs抓取html页面内容(推荐)

在Node.js环境中,抓取HTML页面内容是常见的需求,尤其对于数据爬虫或者自动化测试等场景。本篇文章将深入探讨如何使用Node.js实现这一功能,包括两种不同的方法,并结合示例代码进行详细解释。我们需要了解Node.js的内置模块`http`,它允许我们发送HTTP请求。此外,如果要处理非UTF-8编码的网页,可能还需要`iconv-lite`模块来解码字符集。第一种方法使用了`http`模块和`iconv-lite`模块,适用于处理GBK编码的网页。以下为关键代码: ```javascript var http = require("http"); var iconv = require('iconv-lite'); var option = { hostname: "stockdata.stock.hexun.com", path: "/gszl/s601398.shtml" }; var req = http.request(option, function(res) { res.on("data", function(chunk) { console.log(iconv.decode(chunk, "gbk")); }).on("error", function(e) { console.log(e.message); }); req.end(); ```在这段代码中,我们创建了一个HTTP GET请求到指定的URL("stockdata.stock.hexun.com/gszl/s601398.shtml")。当接收到响应时,我们监听"data"事件,将每一块数据(chunk)用`iconv-lite`解码为GBK编码的字符串并打印出来。如果在请求过程中发生错误,会触发"error"事件并打印错误信息。第二种方法利用Promise来封装HTTP请求,适合异步操作。以下是该方法的代码: ```javascript function loadPage(url) { var http = require('http'); var pm = new Promise(function(resolve, reject) { http.get(url, function(res) { var html = ''; res.on('data', function(d) { html += d.toString(); }); res.on('end', function() { resolve(html); }).on('error', function(e) { reject(e); }); return pm; } loadPage('http://www.baidu.com').then(function(d) { console.log(d); }); ```在这个例子中,我们定义了一个名为`loadPage`的函数,它接收一个URL作为参数,返回一个Promise。当我们调用这个函数并传入一个URL(如'http://www.baidu.com'),它会发起一个HTTP GET请求。接收到的数据被累积到变量`html`中,当所有数据接收完毕('end'事件触发)时,Promise解析为累积的HTML字符串。如果在请求过程中出现错误,Promise会被拒绝,并将错误信息传递给`.catch()`处理。这两种方法都可以有效地抓取HTML页面内容,但根据实际需求,你可能需要扩展这些基础代码,例如添加错误处理、超时控制、请求重试机制,或者使用更高级的库,如`axios`或`request-promise`,以提高代码的可读性和可维护性。同时,对于大规模的网页抓取,可以考虑使用`puppeteer`这样的浏览器自动化工具,它能更好地模拟用户行为,处理JavaScript动态加载的内容。
pdf 文件大小:24.32KB