用TypeScript和got库写一个爬虫程序。首先,我得确认他们对TypeScript和Node.js的基础了解,可能他们已经有了一些JS的经验,但不确定。接下来,需要明确爬虫的目标,比如要爬取的网站、需要的数据类型以及处理方式。
首先,得考虑项目的初始化。要创建一个TypeScript项目,可能需要用npm或yarn初始化,安装TypeScript和相关类型定义。然后,安装got库,它是一个流行的HTTP请求库,替代了之前的request库。同时,可能需要cheerio来解析HTML内容,这样方便用类似jQuery的方法提取数据。
然后,设置TypeScript的配置文件tsconfig.json,确保输出目录和模块系统正确。接着,编写主程序文件,比如src/index.ts。在代码中,需要导入got和cheerio,发送GET请求获取页面内容,然后用cheerio加载HTML进行解析。
大家可能想爬取特定结构的数据,比如文章标题和链接。所以,需要选择器方面的知识,比如类名或标签选择器。要提醒大家注意网站的法律条款和robots.txt,避免法律问题。此外,可能需要设置请求头,比如User-Agent,模拟浏览器访问,防止被屏蔽。
另外,错误处理也很重要。网络请求可能会失败,所以要用try-catch块,处理可能的异常。还有,异步函数的使用,比如async/await,确保代码的流程正确。可能还需要设置延迟,避免对目标网站造成过大压力,导致IP被封。

下面是一个使用 TypeScript 和 got
库编写的简单爬虫程序示例,包含详细步骤说明:
1. 初始化项目
bash
mkdir ts-crawler
cd ts-crawler
npm init -y
npm install typescript ts-node @types/node --save-dev
npm install got cheerio # 安装 HTTP 客户端和 HTML 解析器
npx tsc --init
2. 基本代码实现 (src/index.ts)
typescript
import got from 'got';
import * as cheerio from 'cheerio';
interface Article {
title: string;
url?: string;
}
// 示例爬虫:爬取掘金首页文章列表
async function crawlJuejin(): Promise<Article[]> {
try {
// 发送 HTTP 请求
const response = await got('https://juejin.cn/', {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
});
// 使用 cheerio 解析 HTML
const $ = cheerio.load(response.body);
const articles: Article[] = [];
// 通过选择器提取数据
$('.entry-list .entry').each((index, element) => {
const title = $(element).find('.title').text().trim();
const url = $(element).find('.title').attr('href');
articles.push({ title, url });
});
return articles;
} catch (error) {
console.error('爬取失败:', error);
return [];
}
}
// 执行爬虫
(async () => {
const articles = await crawlJuejin();
console.log(`共爬取到 ${articles.length} 篇文章`);
console.log(articles.slice(0, 3)); // 打印前3条结果
})();
3. 配置 TypeScript (tsconfig.json)
确保以下配置已启用:
json
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
4. 添加运行脚本 (package.json)
json
{
"scripts": {
"start": "ts-node src/index.ts",
"build": "tsc",
"run": "node dist/index.js"
}
}
5. 运行程序
arduino
npm start
# 或编译后运行
npm run build && npm run run
功能说明:
- 使用
got
发送 HTTP 请求并自动处理响应 - 通过
cheerio
实现类似 jQuery 的 DOM 操作 - 设置 User-Agent 头模拟浏览器访问
- 使用 TypeScript 接口定义数据结构
- 包含错误处理机制
高级功能扩展建议:
- 添加延迟防止封禁:
javascript
import { setTimeout } from 'timers/promises';
async function crawlWithDelay() {
await setTimeout(1000); // 1秒延迟
// 爬取逻辑...
}
- 使用代理服务器:
rust
const response = await got(url, {
proxy: 'http://user:pass@host:port'
});
- 处理分页:
ini
for (let page = 1; page <= 5; page++) {
const url = `https://example.com/page/${page}`;
// 爬取每个页面...
}
注意事项:
- 遵守目标网站的 robots.txt 规则
- 尊重网站的服务条款
- 控制请求频率避免对目标服务器造成压力
- 添加适当的异常处理
- 可能需要处理反爬虫机制(验证码、IP限制等)
根据实际需求,你可以通过以下方式修改代码:
- 调整 CSS 选择器匹配目标网站结构
- 修改数据存储方式(保存到文件/数据库)
- 添加登录认证逻辑
- 实现更复杂的爬取策略
请确保你的爬虫使用符合法律法规和网站的服务条款。