TypeScript 爬虫项目实战:抓取豆瓣影戏 Top 250(TypeScript简朴应用) ...

打印 上一主题 下一主题

主题 989|帖子 989|积分 2967

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
项目先容

通过 TypeScript 实现一个简朴的爬虫程序,从豆瓣影戏 Top 250 页面抓取影戏的标题和评论信息,并将数据存储到当地 JSON 文件中。该项目使用了 superagent 和 cheerio 两个核心工具:


  • superagent:一个轻量的 HTTP 哀求库,用于获取网页 HTML 内容。
  • cheerio:一个雷同 jQuery 的 HTML 解析库,方便从 HTML 中提取需要的数据。
代码详解

1. 数据布局设计

  1. interface Target {
  2.     name: string;
  3.     comment: string;
  4. }
  5. interface StoreData {
  6.     time: number;
  7.     data: Target[];
  8. }
复制代码


  • Target 接口用于存储每部影戏的标题和评论。
  • StoreData 接口用于存储整个数据聚集以及时间戳,便于后续分析。
2. 发送哀求获取 HTML 内容

  1. let res = await supporagent.get(url);
  2. let html = res.text;
复制代码


  • 通过 superagent.get() 方法发送 HTTP 哀求,获取网页 HTML 内容并存储在 html 变量中。
3. HTML 解析与数据提取

  1. let allContent = cheerio.load(html);
  2. let fileItems = allContent('.item');
复制代码


  • 使用 cheerio.load() 将 HTML 加载为可操纵的 DOM 布局。
  • fileItems 存储了所有影戏条目元素,便于遍历提取信息。
4. 写入 JSON 文件

  1. fs.writeFile('movie1.json', JSON.stringify(storeData), 'utf-8', (err) => {
  2.     if (err) {
  3.         console.log(err);
  4.     } else {
  5.         console.log('写入成功');
  6.     }
  7. });
复制代码


  • 将提取到的数据写入 movie.json 文件中,确保内容保存成功。
完备代码

  1. import supporagent from 'superagent';import * as cheerio from 'cheerio';import fs from 'fs';// 数据布局界说interface Target {
  2.     name: string;
  3.     comment: string;
  4. }
  5. interface StoreData {
  6.     time: number;
  7.     data: Target[];
  8. }
  9. // 目的网址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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表