用 Node.js 写一个爬虫

自己设计一个网站,然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈,如果自己写着玩可能没啥事,但如果用这个网站来获利,你可能就要被寄律师函了,毕竟这有点‘刑’。这篇文章呢,就带大家爬取豆瓣TOP250电影的信息。豆瓣电影 Top 250 \(douban.com\)[1]

准备工作

  1. 通过指令npm init初始化文件夹,会获得package.json项目说明书。

  2. 爬虫必备工具:cheerio;通过在终端输入npm i cheerio,即可将文件装到项目里。cheerio 是 jquery 核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对 DOM 进行操作的地方。大家可以简单的理解为用来解析 html 非常方便的工具。

开始(细分七步)

  1. 用https模块(node直接提供给我们的)获取网站地址,通过get方法读取网站地址上的数据。

const https = require('https')
https.get('https://movie.douban.com/top250', function (res) {let html = ''res.on('data', function (chunk) {//console.log(chunk + '');//得到数据流,通过字符串拼接得到html结构html += chunk})

这样会读取到整个页面的html结构。

  1. 通过 res.on('end', function () {}),保证读取完了才会去做操作。

  2. 引入cheerio

const cheerio = require('cheerio')

  1. 获取html中的数据

const $ = cheerio.load(html)$('li .item').each(function () {const title = $('.title', this).text()const star = $('.info .bd .rating_num', this).text()const pic = $('.pic img', this).attr('src')})

这里需要注意的是我们可以去页面上看我们需要拿到哪个类名里面的内容,通过$符号可以拿到内容。

 

 

  1. 创建一个空数组,把数据以对象的形式存放在数组中

let allFiles = []allFiles.push({title: title,star: star,pic: pic})

我们可以通过console.log(allFiles)来检查是否打印出来了我们需要的结果。

  1. 将数据写入文件,引用node官方提供的模块fs

const fs = require('fs')

  1. 创建文件夹files.json,向其中写入数据

fs.writeFile('./files.json', JSON.stringify(allFiles), function (err, data) {if (err) {throw err}console.log('文件保存成功');})

到这之后,我们可以看到在当前文件夹下自动创建了文件files.json,里面已经有了我们想要的数据。

 

完整代码

//引入模块
const https = require('https')
const cheerio = require('cheerio')
const fs = require('fs')
//获取页面的html结构
https.get('https://movie.douban.com/top250', function (res) {let html = ''res.on('data', function (chunk) {//console.log(chunk + '');html += chunk})res.on('end', function () {// 获取html中的数据const $ = cheerio.load(html)let allFiles = []//拿到每一个item中我们需要的数据$('li .item').each(function () {const title = $('.title', this).text()const star = $('.info .bd .rating_num', this).text()const pic = $('.pic img', this).attr('src')//数据以对象的形式存放在数组中allFiles.push({title: title,star: star,pic: pic})})//console.log(allFiles);//将数据写入文件中fs.writeFile('./files.json', JSON.stringify(allFiles), function (err, data) {if (err) {throw err}console.log('文件保存成功');})})
})

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/824072.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Android APK未签名提醒

最近新建了一个项目,在build.gradle中配置好了签名,在执行打包的时候打出的包显示已签名,但是在上传市场的时候提示未签名。于是排查了好久,发现在build.gradle中配置的minsdk 24,会导致不使用V1签名,于是我…

用 Unity 实现的安检模拟小游戏源码,通过安检设备 (扫描仪) 检查乘客的随身物品 根据禁止名单对乘客做出判断是否允许通行

介绍 用 Unity 实现的安检模拟小游戏 软件版本 Unity 2019.4.9f1 (64-bit) Visual Studio 2019 游戏玩法 在游戏中你将扮演一名安全检查员 通过安检设备 (扫描仪) 检查每位乘客的随身物品 根据禁止名单对乘客做出判断:允许通行或者下令逮捕 游戏效果 游戏截图…

十三:爬虫-Scrapy框架(下)

一:各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构,方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

video数据的维度及维度变形

B*C*D*H*W的值并不是指输入模型的样本的总大小,它仅仅代表着输入模型的video数据的属性(形状)。 reshape 在reshape时,出现的报错“cant reshape of size input”之类的,是指:那些数据没法组成规定的形状…

vivado CDC约束-“设置总线倾斜”对话框

“设置总线倾斜”对话框 在AMD Vivado™ IDE中,可以通过多种方式设置总线偏斜约束: •通过时间约束编辑器。选择窗口 → 时间限制 → 断言 → 设置总线倾斜。从“时序约束编辑器”中,可以添加、删除或修改总线扭曲约束。 注意&#…

【Transformer】深入理解Transformer模型1——初步认识了解

前言 Transformer模型出自论文:《Attention is All You Need》 2017年 近年来,在自然语言处理领域和图像处理领域,Transformer模型都受到了极为广泛的关注,很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

【分布式配置中心】聊聊Apollo的安装与具体配置变更的原理

【管理设计篇】聊聊分布式配置中心 之前就写过一篇文章,介绍配置中心,但是也只是简单描述了下配置中心的设计点。本篇从apollo的安装到部署架构到核心原理进一步解读,大概看了下apollo的原理,感觉没有必要深究,所以就…

SSM房屋租赁系统----计算机毕业设计

项目介绍 房屋租赁系统,基于 Spring5.x 的实战项目,此项目非Maven项目。 前台系统主要功能包括房源列表展示、房源详细信息展示、根据房源特征进行搜索,包括:房型、小区名;以及房源的预订功能。 后台管理: 用户信息管…

秒杀系统的设计思路(应对高并发,超卖等问题的解决思路)

首先我们先看一下设计秒杀系统时,我们应该考虑的问题。 解决方案: 一.页面静态化结合CDN内容分发 前端把能提前放入cdn服务器的东西都放进去,反正把所有能提升效率的步骤都做一下,减少真正秒杀时候服务器的压力。 秒杀活动的页面…

Halcon利用颜色信息提取背景相似的字符区域

Halcon利用颜色信息提取背景相似的字符区域 文章目录 Halcon利用颜色信息提取背景相似的字符区域 本文以一个例子说明利用颜色信息进行目标提取。如图所示,图(a)为输入的原始图像,目标为提取出字符区域。由图(a)可见&a…

【前端框架】 了不起的 TypeScript 入门教程

前言 想学习 TypeScript 的小伙伴看过来,本文将带你一步步学习 TypeScript 入门相关的十四个知识点,详细的内容大纲请看下图: TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集&#xff…

【网络安全常用术语解读】SCAP详解

本文主要介绍什么是SCAP,SCAP的产生背景是怎样的,SCAP有什么用途,有哪些组件,各个组件的用途是什么? SCAP产生背景 由于计算机和网络技术的快速发展,越来越多的软件和系统被应用到企业和机构中&#xff0c…

2023十大编程语言及未来展望

2023十大编程语言及未来展望 1. 2023年十大编程语言排行榜2. 十大编程语言未来展望PythonCCJavaC#JavaScriptPHPVisual BasicSQLAssembly language 1. 2023年十大编程语言排行榜 TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎&a…

c++学习笔记-提高篇-STL-函数对象

目录 一、函数对象 二、函数对象使用 三、谓词 1、概念 2、一元谓词 3、二元谓词 插入一条sort函数源码 四、内建函数对象 1.基本概念 2、算数仿函数 3、关系仿函数 4、逻辑仿函数 一、函数对象 函数对象概念 (1)重载函数调用操作符的类&a…

【数据结构】八、查找

一、基本概念 静态查找:只查找,不改变集合内数据元素 动态查找:有则输出元素,无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找(二分查找) 在有序的线性表中&…

前端八股文(工程化篇)

目录 1.常用的git命令有哪些? 2.git rebase和git merge的区别 3.有哪些常见的Loader和Plugin? 4.webpack的构建流程 5.bundle,chunk,module是什么? 6.如何提高webpack的打包速度 7.vite比webpack快在哪里 8.说一下你对Monorepo的理解 …

组合总和[中等]

一、题目 给你一个 无重复元素 的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates中的 同一个 数字可以 无限制重复被选取 。如果…

再见2023,你好2024(附新年烟花python实现)

亲爱的朋友们: 写点什么呢,我已经停更两个月了。2023年快结束了,时间真的过得好快,总要写点什么留下纪念吧。这一年伴随着许多挑战和机会,给了我无数的成长和体验。坦白说,有时候我觉得自己好像是在时间的…

腾讯云4核8G服务器CVM标准型S5实例 S5.LARGE8性能测评

腾讯云4核8G服务器优惠价格表,云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元,5年6490.44元,轻量应用服务器4核8G12M带宽一年446元、529元15个月,阿腾云atengyun.com分享腾讯云4核8G服务器详细配置、优惠价格及限制条件&…

ssm基于java的网上手机销售系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网上手机销售系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…