nodejs | 看看豆瓣Top250电影有哪些?

简介: 前面写了`Python` 的版本,然后用 `nodejs` 页写一个吧!

前面写了Python 的版本,然后用 nodejs 页写一个吧!

思路

  • 需要知道一共有多少页
  • 爬单个页面数据处理
  • 分页爬取,循环一下单个页面数据处理就好了

代码

const axios = require("axios");
const cheerio = require("cheerio");
const fs = require("fs");
const dbUrl = "https://movie.douban.com/top250";
// 找到页数,每页25个
const findCount = async () => {
  try {
    const { status, data } = await axios.get(dbUrl);
    if (status === 200) {
      const $ = cheerio.load(data);
      const count = $(".count").text();
      return count.replace(/[^0-9]/gi, "");
    }
  } catch (error) {
    console.log("error", error.code);
    return 0;
  }
};

// 处理函数
const handleText = async (pageNum) => {
  const url = dbUrl + `?start=${pageNum}`;
  console.log(url);
  try {
    const { status, data } = await axios.get(url);
    let list = [];
    if (status === 200) {
      const $ = cheerio.load(data);
      const pic = $(".pic");
      for (let i = 0; i < pic.length; i++) {
        const element = pic[i];
        const $img = cheerio.load(element);
        const index = $img("em").text();
        const imgs = $img("img").attr();
        list.push({ index, name: imgs.alt, img: imgs.src });
      }
      return list;
    }
  } catch (error) {
    console.log("error", error.code);
    return [];
  }
};

const main = async () => {
  // 如果存在文件,则删除
  if (fs.existsSync("./douban.json")) {
    fs.unlinkSync("./douban.json");
  }
  let result = [];
  const count = (await findCount()) / 25;
  for (let i = 0; i < count; i++) {
    const listItem = await handleText(i * 25);
    result.push(...listItem);
  }
  //   追加文件
  fs.appendFileSync("./douban.json", JSON.stringify(result));
};

main();

结论

最后会在同一个文件夹下面生成一个douban.json的数组对象。
传送门:Python版本

相关文章
|
消息中间件 存储 分布式计算
【Flume】Flume配置文件详细分析
【4月更文挑战第4天】【Flume】Flume配置文件详细分析
|
关系型数据库 定位技术 数据库
空间数据中台是什么,怎么用?DataQ空间智能全面开放邀测
阿里云空间数据中台不等同于GIS,它是在DataQ数据资源平台中体系化的整合了空间数据的处理能力,用于空间数据治理和空间领域数字化转型需要。DataQ空间智能包括空间数据同步、空间数据查询和浏览、空间数据管理、空间数据服务和空间数据资产管理等能力。用户可以通过阿里云官网注册账号并开通DataQ的试用白名单来使用DataQ空间智能。在使用过程中,需要注意空间数据源的配置、zip压缩方式、计算集群的设置等问题。DataQ空间智能公共云的开通,将大幅度降低体验和试用的门槛和成本,为线下项目的选型做好准备;同时仍然需要一定的技术投入和耐心,但数字化转型是未来的大势所趋,空间数据中台是必然的选择。
空间数据中台是什么,怎么用?DataQ空间智能全面开放邀测
|
NoSQL 安全 Linux
【Redis入门】在阿里云上快速安装 Redis
如果你最近打算学习 redis 并且买了阿里云的 Linux 服务器,那么借助阿里云服务器和宝塔Linux面板,只需要简单几步就可以安装好 redis。
1319 0
【Redis入门】在阿里云上快速安装 Redis
|
Python
pythonSpider_urllib获取豆瓣电影top250信息写入excel
pythonSpider_urllib获取豆瓣电影top250信息写入excel
170 0
|
11月前
|
JSON 算法 vr&ar
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
本文介绍了如何使用COCO评估器通过Detectron2库对目标检测模型进行性能评估,生成coco_instances_results.json文件,并利用pycocotools解析该文件以计算AP、AR、MR和DR等关键指标。
818 1
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
|
存储 机器学习/深度学习 自然语言处理
LangChain与向量数据库:高效的信息检索方案
【8月更文第4天】随着自然语言处理技术的发展,特别是深度学习的进步,我们能够更加高效地处理大量的文本数据。LangChain 作为一种强大的工具链,旨在简化和加速构建复杂的自然语言处理应用程序。结合向量数据库,LangChain 可以实现高效且精准的信息检索功能。本文将探讨这一组合的工作原理,并通过一个具体的实现案例来展示其在实际应用中的效果。
1096 2
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
运维 图形学 Python
从零开始的PICO教程(2)--实时预览应用场景
这篇文章是关于如何使用PICO Unity Live Preview Plugin在PICO设备上进行实时预览应用场景的教程,包括准备工作、操作步骤和故障排查方法。
|
机器学习/深度学习 人工智能 数据可视化
【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类
CORA数据集里面含有每一篇论文的关键词以及分类信息,同时还有论文间互相引用的信息。搭建AI模型,对数据集中的论文信息进行分析,根据已有论文的分类特征,从而预测出未知分类的论文类别。
942 0
|
存储 API 持续交付
virsh 的工作原理
`virsh`是基于libvirt API的命令行虚拟机管理工具,适用于自动化部署和管理。它提供交互和非交互模式,用于连接到Hypervisor,执行如创建、管理、配置虚拟机及网络、存储等任务。用户需相应权限,无权限者只能读取信息。virsh通过与libvirtd守护进程通信,实现对虚拟化环境的控制,是系统管理员的强大助手。
330 2