返回

用 TypeScript 写个简单的爬虫,新手入门指南

前端

前言

网络爬虫是一种软件工具,用于从网站上收集数据。它们通常用于收集诸如新闻文章、产品信息或社交媒体帖子等信息。网络爬虫的工作原理是下载网页内容,解析 HTML 代码,然后提取所需的信息。

TypeScript 简介

TypeScript 是一种 JavaScript 的超集,它添加了类型系统和一些其他特性。TypeScript 可以编译成 JavaScript 代码,因此它可以运行在任何支持 JavaScript 的环境中。

准备工作

在开始之前,您需要确保已经安装了以下软件:

  • TypeScript 编译器
  • Node.js
  • 一个文本编辑器

编写 TypeScript 爬虫

首先,创建一个新的 TypeScript 项目。您可以使用以下命令:

mkdir typescript-crawler
cd typescript-crawler
npm init -y

接下来,在项目目录中创建一个名为 index.ts 的文件。这个文件将包含您的爬虫代码。

index.ts 文件中,首先导入必要的库:

import * as puppeteer from 'puppeteer';
import * as fs from 'fs';

puppeteer 库用于控制浏览器,fs 库用于文件读写。

接下来,定义一个名为 scrapeQuotes 的异步函数。这个函数将负责从 Quotes to Scrape 网站上抓取名言数据:

async function scrapeQuotes() {
  // 创建一个新的浏览器实例
  const browser = await puppeteer.launch();

  // 打开 Quotes to Scrape 网站
  const page = await browser.newPage();
  await page.goto('https://quotes.toscrape.com/');

  // 等待页面加载完成
  await page.waitForSelector('.quote');

  // 获取所有名言元素
  const quotes = await page.$('.quote');

  // 从每个名言元素中提取数据
  const data = [];
  for (const quote of quotes) {
    const text = await quote.$eval('div.quote', el => el.textContent);
    const author = await quote.$eval('small.author', el => el.textContent);
    const tags = await quote.$eval('a.tag', els => els.map(el => el.textContent));

    data.push({
      text,
      author,
      tags,
    });
  }

  // 将数据保存到文件中
  fs.writeFileSync('quotes.json', JSON.stringify(data));

  // 关闭浏览器
  await browser.close();
}

最后,调用 scrapeQuotes 函数来启动爬虫:

scrapeQuotes();

运行爬虫

要运行爬虫,请在终端中输入以下命令:

tsc index.ts
node index.js

爬虫运行完成后,您可以在项目目录中找到一个名为 quotes.json 的文件。这个文件包含了从 Quotes to Scrape 网站上抓取到的名言数据。

结语

本教程向您展示了如何使用 TypeScript 编写一个简单的爬虫。您还可以使用 TypeScript 编写更复杂的爬虫,来抓取各种各样的数据。