一个网络爬虫和浏览器自动化库
Crawlee涵盖了您的爬虫和抓取的全过程,帮助您快速构建可靠的爬虫。
即使使用默认配置,您的爬虫也会表现得像人类一样,能够避开现代机器人保护机制的检测。Crawlee为您提供了爬取网页链接、抓取数据并将其存储到磁盘或云端的工具,同时保持可配置性以满足您项目的需求。
Crawlee作为crawlee
NPM包提供。
👉 在Crawlee项目网站查看完整文档、指南和示例 👈
Python版Crawlee现已开放早期使用。🐍 👉 查看源代码 👈
安装
我们建议访问Crawlee文档中的介绍教程以获取更多信息。
Crawlee需要Node.js 16或更高版本。
使用Crawlee CLI
尝试Crawlee的最快方法是使用Crawlee CLI并选择入门示例。CLI将为您安装所有必要的依赖项并添加样板代码供您使用。
npx crawlee create my-crawler
cd my-crawler
npm start
手动安装
如果您更喜欢将Crawlee添加到您自己的项目中,请尝试以下示例。因为它使用了PlaywrightCrawler
,我们还需要安装Playwright。为了减小安装包大小,Crawlee并未捆绑Playwright。
npm install crawlee playwright
import { PlaywrightCrawler, Dataset } from 'crawlee';
// PlaywrightCrawler使用Playwright库控制的无头浏览器爬取网页。
const crawler = new PlaywrightCrawler({
// 使用requestHandler处理每个爬取的页面。
async requestHandler({ request, page, enqueueLinks, log }) {
const title = await page.title();
log.info(`${request.loadedUrl}的标题是'${title}'`);
// 将结果以JSON格式保存到 ./storage/datasets/default
await Dataset.pushData({ title, url: request.loadedUrl });
// 从当前页面提取链接
// 并将它们添加到爬取队列中。
await enqueueLinks();
},
// 取消注释此选项以查看浏览器窗口。
// headless: false,
});
// 将第一个URL添加到队列并开始爬取。
await crawler.run(['https://crawlee.dev']);
默认情况下,Crawlee将数据存储在当前工作目录的./storage
中。您可以通过Crawlee配置覆盖此目录。有关详细信息,请参阅配置指南、请求存储和结果存储。
🛠 功能
- HTTP和无头浏览器爬取的单一接口
- 用于爬取URL的持久化队列(广度优先和深度优先)
- 可插拔的表格数据和文件存储
- 根据可用系统资源自动扩展
- 集成的代理轮换和会话管理
- 可通过钩子自定义的生命周期
- 用于引导项目的CLI
- 可配置的路由、错误处理和重试
- 可直接部署的Dockerfiles
- 使用泛型的TypeScript编写
👾 HTTP爬取
- 零配置HTTP2支持,甚至支持代理
- 自动生成类浏览器头部
- 复制浏览器的TLS指纹
- 集成快速HTML解析器。Cheerio和JSDOM
- 是的,您也可以抓取JSON API
💻 真实浏览器爬取
- JavaScript渲染和截图
- 支持无头和有头模式
- 零配置生成类人指纹
- 自动浏览器管理
- 使用相同接口的Playwright和Puppeteer
- Chrome、Firefox、Webkit等多种浏览器
在Apify平台上使用
Crawlee是开源的,可以在任何地方运行,但由于它是由Apify开发的,因此在Apify平台上设置和在云中运行非常容易。访问Apify SDK网站了解更多关于将Crawlee部署到Apify平台的信息。
支持
如果您发现Crawlee的任何错误或问题,请在GitHub上提交问题。如有疑问,您可以在Stack Overflow上提问,在GitHub讨论区提问,或加入我们的Discord服务器。
贡献
欢迎您的代码贡献,您将获得永恒的赞誉!如果您有任何改进的想法,可以提交问题或创建拉取请求。有关贡献指南和行为准则,请参阅CONTRIBUTING.md。
许可证
本项目根据Apache License 2.0许可 - 详情请参阅LICENSE.md文件。