马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
项目先容
通过 TypeScript 实现一个简朴的爬虫程序,从豆瓣影戏 Top 250 页面抓取影戏的标题和评论信息,并将数据存储到当地 JSON 文件中。该项目使用了 superagent 和 cheerio 两个核心工具:
- superagent:一个轻量的 HTTP 哀求库,用于获取网页 HTML 内容。
- cheerio:一个雷同 jQuery 的 HTML 解析库,方便从 HTML 中提取需要的数据。
代码详解
1. 数据布局设计
- interface Target {
- name: string;
- comment: string;
- }
- interface StoreData {
- time: number;
- data: Target[];
- }
复制代码
- Target 接口用于存储每部影戏的标题和评论。
- StoreData 接口用于存储整个数据聚集以及时间戳,便于后续分析。
2. 发送哀求获取 HTML 内容
- let res = await supporagent.get(url);
- let html = res.text;
复制代码
- 通过 superagent.get() 方法发送 HTTP 哀求,获取网页 HTML 内容并存储在 html 变量中。
3. HTML 解析与数据提取
- let allContent = cheerio.load(html);
- let fileItems = allContent('.item');
复制代码
- 使用 cheerio.load() 将 HTML 加载为可操纵的 DOM 布局。
- fileItems 存储了所有影戏条目元素,便于遍历提取信息。
4. 写入 JSON 文件
- fs.writeFile('movie1.json', JSON.stringify(storeData), 'utf-8', (err) => {
- if (err) {
- console.log(err);
- } else {
- console.log('写入成功');
- }
- });
复制代码
- 将提取到的数据写入 movie.json 文件中,确保内容保存成功。
完备代码
- import supporagent from 'superagent';import * as cheerio from 'cheerio';import fs from 'fs';// 数据布局界说interface Target {
- name: string;
- comment: string;
- }
- interface StoreData {
- time: number;
- data: Target[];
- }
- // 目的网址let url: string = 'https://movie.douban.com/top250';// 爬取数据的核心函数async function getData() { let recommendationFiles: Target[] = []; // 发送哀求获取 HTML 内容 let res = await supporagent.get(url); let html = res.text; // 解析 HTML let allContent = cheerio.load(html); let fileItems = allContent('.item'); // 遍历页面中的影戏条目 fileItems.each((index, item) => { let fname: string = allContent(item) .find('.hd') .find('.title') .first() .text(); let comment: string = allContent(item) .find('.inq') .text(); recommendationFiles.push({ name: fname, comment: comment }); }); // 组织数据布局并写入文件 let storeData: StoreData = { time: new Date().getTime(), data: recommendationFiles }; fs.writeFile('movie1.json', JSON.stringify(storeData), 'utf-8', (err) => { if (err) { console.log(err); } else { console.log('写入成功'); } });}// 执行爬虫程序getData();
复制代码 凡是已往,皆为序章;凡是未来,皆有可期。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |