爬虫获取页面信息并存储
2021/12/5 23:17:41
本文主要是介绍爬虫获取页面信息并存储,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
-
目标: 获取CSDN首页直播内容
-
实现获取内容的类
Crowller
- 获取内容: 通过
superagent
插件获取页面信息 - 存储内容:
fs.writeFileSync
根据以上两点实现的类:
import fs from 'fs'; import path from 'path'; import superagent from 'superagent'; import DellAnalyzer from './dellAnalyzer'; export interface Analyzer { analyze: (html: string, filePath: string) => string; } class Crowller { private filePath = path.resolve(__dirname, '../data/live.json'); // 存储的文件位置 // 获取页面信息 private async getRawHtml() { const result = await superagent.get(this.url); return result.text; } // 将爬取到的内容写入文件 private writeFile(content: string) { fs.writeFileSync(this.filePath, content); } // 初始化 private async initSpiderProcess() { const html = await this.getRawHtml(); const fileContent = this.analyzer.analyze(html, this.filePath); // 处理需要获取的页面内容 this.writeFile(fileContent); } constructor(private url: string, private analyzer: Analyzer) { this.initSpiderProcess(); } } const url = `https://www.csdn.net/?spm=3001.4476`; // 获取csdn首页直播信息 const analyzer = DellAnalyzer.getInstance(); // 单例模式获取 new Crowller(url, analyzer); // 创建一个实例执行
- 处理网页内容的类
通过cheerio
插件,以类似jQuery的方式获取节点信息,以储存需要的内容
import fs from 'fs'; import cheerio from 'cheerio'; // 获取页面内容的工具 import { Analyzer } from './crowller'; interface Live { title: string; time: string; } interface LiveResult { time: number; data: Live[]; } interface Content { [propName: number]: Live[]; } export default class DellAnalyzer implements Analyzer { private static instance: DellAnalyzer; static getInstance() { if (!DellAnalyzer.instance) { DellAnalyzer.instance = new DellAnalyzer(); } return DellAnalyzer.instance; } // 获取直播名字跟时间 private getLiveInfo(html: string) { const $ = cheerio.load(html); const courseItems = $('.www_live_item'); const courseInfos: Live[] = []; courseItems.map((index, element) => { const title = $(element).find('h3').text(); const time = $(element).find('.text').text(); courseInfos.push({ title, time }); }); return { time: new Date().getTime(), data: courseInfos, }; } // 处理需要存储的内容 private generateJsonContent(liveInfo: LiveResult, filePath: string) { let fileContent: Content = {}; // 文件存在则追加内容 if (fs.existsSync(filePath)) { fileContent = JSON.parse(fs.readFileSync(filePath, 'utf-8')); } fileContent[liveInfo.time] = liveInfo.data; return fileContent; } public analyze(html: string, filePath: string) { const liveInfo = this.getLiveInfo(html); const fileContent = this.generateJsonContent(liveInfo, filePath); return JSON.stringify(fileContent); } private constructor() {} }
- package.json配置信息
tsc
: 将ts
文件 转换成js
文件
nodemon
: 自动检测到目录中的文件更改时通过重新启动
concurrently
:同时执行操作命令
相关配置信息:
{ "scripts": { "dev:build": "tsc -w", // 编译 "dev:start": "nodemon node ./build/crowller.js", // 执行 "dev": "concurrently npm:dev:*" }, "nodemonConfig": { "ignore": [ "data/*" ] }, }
通过npm run dev
,就能够实现在修改ts文件的时候编译出js文件,并且执行crowller
代码
这篇关于爬虫获取页面信息并存储的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解