如何使用Node.js和PhantomJS实现下载网页可以分为以下步骤:
- 安装Node.js和PhantomJS
Node.js可以从官网下载安装,安装过程较为简单,不再赘述。
PhantomJS的安装分为两步,首先从官网下载对应版本的PhantomJS二进制文件,然后将其解压至系统环境变量PATH可以找到的目录中。解压完成后可在命令行运行phantomjs --version
来检验是否安装成功。
- 安装Node.js依赖
下载网页的过程中需要Node.js的几个依赖,因此需要在项目根目录下通过npm安装以下依赖:
npm install request
npm install cheerio
npm install phantom
request
用于发起HTTP/HTTPS请求;cheerio
用于解析HTML结构;phantom
用于启动PhantomJS进程。
- 编写Node.js代码
以下载博客园首页为例,代码如下:
const phantom = require('phantom');
const request = require('request');
const cheerio = require('cheerio');
(async function () {
const instance = await phantom.create();
const page = await instance.createPage();
await page.open('https://www.cnblogs.com');
const html = await page.property('content');
const $ = cheerio.load(html);
$('img').each(function () {
const src = $(this).attr('src');
if (src && src.startsWith('http')) {
const filename = src.split('/').pop();
request(src).pipe(fs.createWriteStream(filename));
}
});
await instance.exit();
})();
以上代码中,首先通过phantom.create()
创建PhantomJS实例,然后使用实例创建网页page
并通过page.open()
方法打开目标网页,接着使用page.property('content')
获取页面HTML代码。最后使用cheerio
模块解析HTML并遍历页面中的所有图片地址并下载。
再以下载淘宝首页为例,代码如下:
const phantom = require('phantom');
const request = require('request');
(async function () {
const instance = await phantom.create();
const page = await instance.createPage();
await page.open('https://www.taobao.com');
const cookies = await phantom.cookies();
const cookiesStr = cookies.map(c => `${c.name}=${c.value}`).join('; ');
request.get({
url: 'https://www.taobao.com/nocache/globalsecurity/umscript/1.0.8/index.js',
headers: {
'Cookie': cookiesStr
}
}).pipe(fs.createWriteStream('index.js'));
await instance.exit();
})();
以上代码中,如果直接访问淘宝网站时会发现要求用户先登录才能访问,因此需要将获取的cookies设置到请求的Header中。最后使用流式写入将结果保存为文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs通过phantomjs实现下载网页 - Python技术站