Crawlee: 一款强大易用的爬虫和浏览器自动化库
Crawlee:一款强大而易用的爬虫和浏览器自动化库
https://github.com/apify/crawlee-python 在当今数据驱动的时代,从网络上提取信息的需求越来越迫切。Crawlee 应运而生,作为一款功能强大的爬虫和浏览器自动化库,它能够帮助你快速构建可靠的爬虫,实现无缝的端到端爬取和抓取数据。🚀
Human-like Crawling:规避机器人检测
利用Crawlee,你的爬虫会展现出近乎人类般的行为模式,即使使用默认配置,也能轻松躲过现代机器人的反爬机制。
简化流程:无需繁琐设置
Crawlee 提供了丰富的配置选项,让你可以根据项目需求微调几乎任何方面,而如果默认设置满足你的要求,则完全无需担心技术细节即可完成爬虫构建。
多语言支持:Python 和 TypeScript 版本
Crawlee 不仅提供 Python 版本,还可以使用 TypeScript 实现,满足不同开发需求。
安装 Crawlee
安装 Crawlee 非常简单,只需执行以下命令:
pip install crawlee
如果你想使用 BeautifulSoupCrawler 或 PlaywrightCrawler,请分别安装相应的额外依赖包:
pip install 'crawlee[beautifulsoup]'
pip install 'crawlee[playwright]'
最后,安装 Playwright 依赖:
playwright install
示例:BeautifulSoupCrawler 与 PlaywrightCrawler
BeautifulSoupCrawler:高效提取 HTML 数据
BeautifulSoupCrawler 使用 HTTP 库下载网页,并为用户提供解析后的 HTML 内容。它使用 HTTPX 进行 HTTP 通信和 BeautifulSoup 进行 HTML 解析。对于仅需要从 HTML 内容中有效地提取数据的项目来说,该爬虫非常合适。由于不使用浏览器,因此性能表现出色。但如果需要执行客户端 JavaScript 以获取内容,则需要使用 PlaywrightCrawler。
import asyncio
from crawlee.beautifulsoup_crawler import BeautifulSoupCrawler, BeautifulSoupCrawlingContext
async def main() -> None:
crawler = BeautifulSoupCrawler(
max_requests_per_crawl=10 # 限制爬取请求数量,移除或增加此值可爬取所有链接
)
@crawler.router.default_handler
async def request_handler(context: BeautifulSoupCrawlingContext) -> None:
context.log.info(f'Processing {context.request.url} ...')
data = {
'url': context.request.url,
'title': context.soup.title.string if context.soup.title else None
}
await context.push_data(data) # 将提取的数据推送到默认数据集
await context.enqueue_links() # 将页面上发现的所有链接加入队列
await crawler.run(['https://crawlee.dev'])
if __name__ == '__main__':
asyncio.run(main())
PlaywrightCrawler:处理 JavaScript 内容
PlaywrightCrawler 使用 headless 浏览器下载网页并提供数据提取 API。它基于 Playwright,一个专为管理 headless 浏览器的自动化库。对于依赖于客户端 JavaScript 生成内容的网页或需要与 JavaScript 驱动的内容交互的任务,该爬虫非常出色。但在不需要执行 JavaScript 或需要更高性能的情况下,应考虑使用 BeautifulSoupCrawler。
import asyncio
from crawlee.playwright_crawler import PlaywrightCrawler, PlaywrightCrawlingContext
async def main() -> None:
crawler = PlaywrightCrawler(
max_requests_per_crawl=10
)
@crawler.router.default_handler
async def request_handler(context: PlaywrightCrawlingContext) -> None:
context.log.info(f'Processing {context.request.url} ...')
data = {
'url': context.request.url,
'title': await context.page.title()
}
await context.push_data(data)
await context.enqueue_links()
await crawler.run(['https://crawlee.dev'])
if __name__ == '__main__':
asyncio.run(main())
更多示例和功能
在 Crawlee 文档的 Examples 页面中,可以找到各种额外的用例和演示。Crawlee 还具有许多其他强大的特性,例如:
- 集成代理轮循和会话管理
- 可配置的请求路由,将 URL 引向适当的处理程序
- 持久性 URL 队列
- 可插拔的数据表数据和文件存储
总结
Crawlee 是一个功能强大而易用的爬虫和浏览器自动化库,可以帮助你轻松构建可靠的爬虫。它具有多种优势,例如:统一的 HTTP 和 headless 浏览器爬取接口、自动并行爬取、Python 类型提示支持以及内置错误处理机制。无论你是初学者还是经验丰富的开发者,Crawlee 都能提供一个简便而高效的爬虫解决方案。
- 原文作者:iamdev
- 原文链接:https://blog.iamdev.cn/post/2024/Crawlee__%E4%B8%80%E6%AC%BE%E5%BC%BA%E5%A4%A7%E6%98%93%E7%94%A8%E7%9A%84%E7%88%AC%E8%99%AB%E5%92%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%8A%A8%E5%8C%96%E5%BA%93__/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止转载 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。