接上篇文章,这篇做拆分优化
上篇文章地址
1. 首先拆分 crowller.ts文件,上代码
// 引入 文件操作模块
import fs from 'fs';
// 引入 路径处理模块
import path from 'path';
/* 通过 superagent 轻量的 Ajax API
这个工具 获取网址上面,html的内容
js库ts无法直接读取 cnpm install superagent--save
ts使用翻译文件 @types/引入js库 cnpm install @types/superagent -D
*/
import superagent from 'superagent';
// 引入拆分的 ts文件
import DellAnalyzer from './dellAnalyzer';
export interface AnalyZer {
// 定义 dellAnalyzer.ts, 抛出的方法analyze类型 => 返回值也是string
analyze: (html: string, filePath: string) => string
}
/**
* 创建一个 名称为Crowller的类
* 访问类型
* public 允许 在类的内外被调用
* private 允许 在类内部被使用,不允许类外部使用
* protected 允许 在类内及 继承的子类中被使用,不允许类外使用
* ts 无法直接引用 js库 ,需要一个.d.ts的翻译文件,才可以引入 js库
*/
class Crowller {
// path.resolve 方法用于将相对路径转为绝对路径,__dirname:在哪里使用,就是表示当前文件所在的 目录
private filePath = path.resolve(__dirname, '../data/course.json')
// 解析html 函数
// 获取html内容。 定义 爬取 网站 对应的 最原始html内容
private async getRawHtml() {
// superagent.get(url).then 它是一个promise返回值
const result = await superagent.get(this.url);
// 返回 result.text 是最原始的html
return result.text;
}
// 写入course.json中
private writeFile(content: string) {
fs.writeFileSync(this.filePath, content)
}
// 初始化操作。 定义 获取 解析 html 函数
private async InitSpiderProcess() {
// 调用函数 爬取 网站 对应的 最原始html内容
const html = await this.getRawHtml();
/* 生成json文件,传入html模版,文件路径 */
const fileContent = this.analyzer.analyze(html, this.filePath)
// 写入course.json中,将对象、数组转换成字符串
// this.writeFile(JSON.stringify(fileContent))
this.writeFile(fileContent)
}
// constructor 在这个类被new的时候,瞬间执行,生成一个实例挂载到类上
constructor(private url: string, private analyzer: AnalyZer) {
// 调用 获取 解析 html 函数