- 电影模块:使用的是常规的服务端渲染网站,并使用基础的正则表达式爬取网站数据
- 表情包模块:使用的是cheerio库,该库为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种web爬虫程序
- 音乐模块:爬取的网站是我们使用vue, react等前端框架构建的SPA应用,由于SPA应用不利于SEO,对爬虫不友好,故不能使用常规方法爬取数据。现推荐Puppeteer库,该库是一个Node库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。它能完全模拟用户操作浏览器,生成页面截图和PDF、表单提交、UI测试、性能分析、爬取 SPA 页面并进行预渲染等。
├── emoticon # 爬取表情包模块
├── 表情包目录1
│ ├── 表情1.git
│ └── 表情2.git
└── index.js # 执行的主文件
├── movie # 爬取电影模块
├── movies # 保存网站所有电影数据的目录
│ │── 地区 # 地区分类下的所有数据
│ │── 类型 # 类型分类下的所有数据
│ │── 年份 # 年份分类下的所有数据
│ │── 排序 # 排序分类下的所有数据
│ └── 特色 # 特色分类下的所有数据
├── index.js # 入口文件,爬取所有电影数据
├── movies.js # 封装的爬虫方法
└── server.js # 启动web服务,输出数据到页面
├── music # 爬取音乐模块
├── progress-bar.js # 封装的控制台打印方法
├── tool-fs # 对fs进行二次封装
└── package.json # package.json 依赖
- request: 服务端请求;
- single-line-log: 控制台打印抓取进度
- 进入所有电影页,复制url,使用request请求该url拿到页面所有数据;
- 抓取每一个分类部分代码,进行正则匹配,拿到每一个分类的url;
- 请求上一步url的页面数据,可以匹配改页面的所有电影列表数据,抓取所有电影信息;
- 有部分字段需要在电影的详情页中抓取,请求上一步中抓取到的url获取详情页数据,使用正则匹配获取详情字段;
- 第二步中可以使用循环遍历抓取每一页的数据;
- 封装第二部方法,再次循环遍历所有类型,如:排序,类型,地区,特色,年份等以抓取网站全部数据;
- 最后,使用node提供的文件系统,将所有数据保存在本地文件。
一、 正则匹配:
-
修饰符:s
由于 . 默认不匹配换行符,所以要使用修饰符 s 来匹配任何字符(包括终止符 '\n') -
exec使用:
该函数返回一个类数组,其中存放匹配的结果,如果未找到匹配,则返回值为 null。
/(.*?)e/.exec("The best things in life are free!");
=> [
0: "The"
1: "Th"
groups: undefined
index: 0
input: "The best thin
]
// 0:匹配的整个单词
// 1:要匹配的部分
// index: 匹配字符串中对应字符的位置
需要循环遍历exec方法,才能抓取到所有要匹配的数据。
cheerio:nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种web爬虫程序
axios: 服务端请求;
- 复制分类页面地址,使用axios请求该页数据
- 使用cheerio的方式抓取表情包名称及详情页地址
- 使用上一步拿到的地址请求详情页数据
- 抓取详情页所有表情
- 根据第二部创建对应的表情包目录,将第四步中的表情(使用axios请求url,并设置响应数据类型为stream)使用流的方式生成文件保存在本地
- Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。
- 是浏览器自动化的 产品。安装后,它会下载一个版本的 Chromium,然后使用puppeteer-core 驱动工作。
- 生成页面PDF或截图
- 自动化表单提交、UI 测试、键盘输入等
- 创建一个最新的自动化测试环境。使用最新的 JavaScript 和浏览器功能,可以直接在最新版本的 Chrome 中运行测试。
- 捕获站点的时间线跟踪,以帮助诊断性能问题。
- 爬取 SPA 页面并进行预渲染(即'SSR')