nodejs通过phantomjs实现下载网页

如何使用Node.js和PhantomJS实现下载网页可以分为以下步骤:

  1. 安装Node.js和PhantomJS

Node.js可以从官网下载安装,安装过程较为简单,不再赘述。

PhantomJS的安装分为两步,首先从官网下载对应版本的PhantomJS二进制文件,然后将其解压至系统环境变量PATH可以找到的目录中。解压完成后可在命令行运行phantomjs --version来检验是否安装成功。

  1. 安装Node.js依赖

下载网页的过程中需要Node.js的几个依赖,因此需要在项目根目录下通过npm安装以下依赖:

npm install request
npm install cheerio
npm install phantom

request用于发起HTTP/HTTPS请求;cheerio用于解析HTML结构;phantom用于启动PhantomJS进程。

  1. 编写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技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较

    针对这个问题,我分几个部分来详细介绍一下。 简介 Assert 是 Node.js 中内置的一个断言库,用于测试和检查代码中的条件是否为真。它提供了 equal(), strictEqual(), deepEqual(), strictDeepEqual() 四种方法,这四种方法都被用于测试相等性。这四种方法之间的主要区别在于它们用于检查相等性的方式不同。 …

    node js 2023年6月8日
    00
  • node.js中的events.emitter.listeners方法使用说明

    当我们在使用Node.js进行编程时,经常需要使用事件驱动的编程模式。Node.js中有一个内置模块events,可以方便地实现事件的发布和订阅。其中,events模块提供了一个listeners()方法,用于获取指定事件的所有监听函数,下面是该方法的详细使用说明。 EventEmitter.listeners(eventName) 该方法用于获取指定事件的…

    node js 2023年6月8日
    00
  • vue在install时node-sass@4.14.1 postinstall:node scripts/build.js错误解决

    当在安装 Vue 时,如果遇到类似以下错误: node-sass@4.14.1 postinstall: `node scripts/build.js` 这是由于安装 node-sass 模块时,尝试编译原生模块失败导致的错误。在这种情况下,可以尝试以下步骤解决: 更新 node-sass 模块版本 可以通过安装最新版本的 node-sass 模块来解决问题…

    node js 2023年6月8日
    00
  • Windows上node.js的多版本管理工具用法实例分析

    Windows上node.js的多版本管理工具用法实例分析 在Windows系统上使用node.js时,我们常常需要管理多个版本的node.js。如果只是手动去安装和卸载多个版本的node.js,会非常麻烦。而使用多版本管理工具可以很好地解决这个问题。 多版本管理工具nvm-windows的使用 nvm-windows是Windows上使用最广泛的多版本管理…

    node js 2023年6月8日
    00
  • 详解为生产环境编译Angular2应用的方法

    以下是详解为生产环境编译Angular2应用的方法的完整攻略。 1. 确认Angular CLI版本 在开始编译Angular2应用之前,我们需要确认所使用的Angular CLI版本。请使用以下命令检查版本: ng version 确认版本后,如果需要更新,您可以使用如下命令更新: npm uninstall -g angular-cli @angular…

    node js 2023年6月8日
    00
  • 浅谈node使用jwt生成的token应该存在哪里

    当使用 Node.js 程序生成 JSON Web Token (JWT) 时,您需要决定如何存储生成的 token。根据您的具体情况和需求,您可以将 jwt 存储在 cookies、localStorage 中,或者作为 Authorization 头在 HTTP 请求中发送。 以下是三种存储 jwt 的方式: 存储在Cookie中 当您将 Token 存…

    node js 2023年6月8日
    00
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    下面给出阿里云服务器上搭建Ruby On Rails环境的完整攻略: 1. 登录阿里云服务器 首先,开启控制台登录阿里云服务器。 2. 安装必要依赖 在终端中执行以下命令: sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev …

    node js 2023年6月9日
    00
  • 如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)

    下面是完整攻略。 什么是H5 History模式? H5 History模式是HTML5中新增的History API。它通过更改浏览器地址栏的URL来实现页面不刷新的页面跳转效果。在使用H5 History API时,需要在Nodejs中配置路由规则来支持。一般来说,当你在单页应用中进行跳转时,H5 History模式都是被默认启用的。 解决方案 若要让N…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部