《简易指南》中如何使用 Python 抓取 Crunchbase)
Python 开发人员知道该怎么做:您需要可靠的公司数据,而 Crunchbase 拥有它。本指南向您展示如何使用 Python 构建有效的 Crunchbase 抓取工具来获取所需的数据。
Crunchbase 跟踪重要的详细信息:地点、业务重点、创始人和投资历史。从如此大的数据集中手动提取是不切实际的 - 自动化对于将这些信息转换为可分析的格式至关重要。
在本博客的结尾,我们将探索使用 Crawlee for Python 从 Crunchbase 提取数据的三种不同方法。我们将全面实施其中两个,并讨论第三个的具体细节和挑战。这将帮助我们更好地理解正确选择正确的数据源是多么重要。
注意:本指南来自我们不断发展的社区中的开发人员。你和 Crawlee 一起做过有趣的项目吗?加入我们的 Discord,分享您的经验和博客想法 - 我们重视像您这样的开发者的这些贡献。
我们将介绍的关键步骤:
- 项目设置
- 选择数据源
- 实现基于站点地图的爬虫
- 基于搜索的方法及其局限性分析
- 实现官方API爬虫
- 结论和存储库访问
先决条件
- Python 3.9 或更高版本
- 熟悉网络抓取概念
- Crawlee for Python v0.5.0
- 诗歌 v2.0 或更高版本
项目设置
在开始抓取之前,我们需要设置我们的项目。在本指南中,我们不会使用爬虫模板(Playwright 和 Beautifulsoup),因此我们将手动设置项目。
-
安装诗歌
pipx install poetry
登录后复制登录后复制登录后复制登录后复制 -
创建并导航到项目文件夹。
mkdir crunchbase-crawlee && cd crunchbase-crawlee
登录后复制登录后复制登录后复制 -
使用 Poetry 初始化项目,将所有字段留空。
poetry init
登录后复制登录后复制登录后复制出现提示时:
- 对于“兼容的 Python 版本”,输入:>={您的 Python 版本},=3.10,
- 按 Enter 键将所有其他字段留空
- 输入“yes”确认生成
-
使用 Poetry 将具有必要依赖项的 Crawlee 添加并安装到您的项目中。
poetry add crawlee[parsel,curl-impersonate]
登录后复制登录后复制登录后复制 -
通过为 Crawlee for Python 项目创建标准文件结构来完成项目设置。
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
登录后复制登录后复制登录后复制
建立了基本的项目结构后,我们就可以探索从 Crunchbase 获取数据的不同方法。
选择数据源
虽然我们可以直接从公司页面提取目标数据,但我们需要选择浏览网站的最佳方式。
仔细检查 Crunchbase 的结构表明我们有三个主要的获取数据的选项:
- 站点地图 - 用于完整的站点遍历。
- 搜索 - 有针对性的数据收集。
- 官方API - 推荐方法。
让我们详细研究一下这些方法。
使用站点地图和 Crawlee for Python 抓取 Crunchbase
站点地图是 Google、Ahrefs 和其他搜索引擎等爬虫使用的标准站点导航方式。所有爬虫都必须遵循robots.txt中描述的规则。
让我们看看 Crunchbase 的 Sitemap 的结构:
如您所见,组织页面的链接位于二级站点地图文件内,这些文件是使用 gzip 压缩的。
其中一个文件的结构如下所示:
lastmod 字段在这里特别重要。它允许跟踪自上次数据收集以来哪些公司更新了其信息。这对于定期数据更新特别有用。
1. 配置爬虫进行抓取
为了使用该网站,我们将使用 CurlImpersonateHttpClient,它模拟 Safari 浏览器。虽然这种选择对于使用站点地图来说似乎有些意外,但这是 Crunchbase 的保护功能所必需的。
原因是 Crunchbase 使用 Cloudflare 来防止自动访问。在分析公司页面上的流量时,这一点清晰可见:
一个有趣的功能是,challenges.cloudflare 在加载数据文档后执行。这意味着我们首先接收数据,然后 JavaScript 才会检查我们是否是机器人。如果我们的 HTTP 客户端的指纹与真实浏览器足够相似,我们将成功接收数据。
Cloudflare 还分析站点地图级别的流量。如果我们的爬虫看起来不合法,访问将被阻止。这就是我们模拟真实浏览器的原因。
为了防止由于过度抓取而导致阻塞,我们将配置 ConcurrencySettings。
扩展此方法时,您可能需要代理。有关代理设置的详细信息可以在文档中找到。
我们将以 JSON 格式保存抓取结果。以下是基本的爬虫配置:
pipx install poetry
2. 实现站点地图导航
站点地图导航分两个阶段进行。在第一阶段,我们需要获取包含组织信息的所有文件的列表:
pipx install poetry
在第二阶段,我们处理以gzip格式存储的二级站点地图文件。这需要一种特殊的方法,因为需要首先解压缩数据:
mkdir crunchbase-crawlee && cd crunchbase-crawlee
3. 提取并保存数据
每个公司页面都包含大量信息。出于演示目的,我们将重点关注主要字段:公司名称、简短描述、网站和位置。
Crunchbase 的优点之一是所有数据都以 JSON 格式存储在页面内:
这显着简化了数据提取 - 我们只需要使用一个 Xpath 选择器来获取 JSON,然后应用 jmespath 来提取所需的字段:
poetry init
收集到的数据使用 context.push_data 方法保存在 Crawlee for Python 的内部存储中。当爬虫完成后,我们将所有收集到的数据导出到 JSON 文件:
poetry add crawlee[parsel,curl-impersonate]
4. 运行项目
所有组件就位后,我们需要为爬虫创建一个入口点:
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
使用 Poetry 执行爬虫:
# main.py from crawlee import ConcurrencySettings, HttpHeaders from crawlee.crawlers import ParselCrawler from crawlee.http_clients import CurlImpersonateHttpClient from .routes import router async def main() -> None: """The crawler entry point.""" concurrency_settings = ConcurrencySettings(max_concurrency=1, max_tasks_per_minute=50) http_client = CurlImpersonateHttpClient( impersonate='safari17_0', headers=HttpHeaders( { 'accept-language': 'en', 'accept-encoding': 'gzip, deflate, br, zstd', } ), ) crawler = ParselCrawler( request_handler=router, max_request_retries=1, concurrency_settings=concurrency_settings, http_client=http_client, max_requests_per_crawl=30, ) await crawler.run(['https://www.crunchbase.com/www-sitemaps/sitemap-index.xml']) await crawler.export_data_json('crunchbase_data.json')
5.最后,使用站点地图爬虫的特点
站点地图方法有其独特的优点和局限性。它非常适合以下情况:
- 当您需要收集平台上所有公司的数据时
- 当没有特定的公司选择标准时
- 如果你有足够的时间和计算资源
但是,需要考虑一些重大限制:
- 收集过程中几乎无法过滤数据
- 需要持续监控 Cloudflare 区块
- 扩展解决方案需要代理服务器,这会增加项目成本
使用搜索来抓取 Crunchbase
站点地图方法的局限性可能表明搜索是下一个解决方案。然而,与公共页面相比,Crunchbase 对其搜索功能采用了更严格的安全措施。
主要区别在于 Cloudflare 保护的工作方式。虽然我们在访问公司页面时在 Challenge.cloudflare 检查之前收到数据,但搜索 API 需要通过此检查的有效 Cookie。
让我们在实践中验证一下这一点。在无痕模式下打开以下链接:
# routes.py from crawlee.crawlers import ParselCrawlingContext from crawlee.router import Router from crawlee import Request router = Router[ParselCrawlingContext]() @router.default_handler async def default_handler(context: ParselCrawlingContext) -> None: """Default request handler.""" context.log.info(f'default_handler processing {context.request} ...') requests = [ Request.from_url(url, label='sitemap') for url in context.selector.xpath('//loc[contains(., "sitemap-organizations")]/text()').getall() ] # Since this is a tutorial, I don't want to upload more than one sitemap link await context.add_requests(requests, limit=1)
分析流量时,我们会看到以下模式:
这里的事件顺序是:
- 首先,页面被代码 403 屏蔽
- 然后执行challenges.cloudflare检查
- 只有成功通过检查后,我们才会收到代码为200的数据
自动化此过程需要一个能够绕过 Cloudflare Turnstile 的无头浏览器。当前版本的 Crawlee for Python (v0.5.0) 不提供此功能,尽管计划在未来进行开发。
您可以按照此示例集成 Camoufox,扩展 Crawlee for Python 的功能。
使用官方 Crunchbase API
Crunchbase 提供具有基本功能的免费 API。付费订阅用户可以获得扩展的数据访问权限。可用端点的完整文档可以在官方 API 规范中找到。
1. 设置API访问
要开始使用 API,请按照以下步骤操作:
- 创建 Crunchbase 帐户
- 转到集成部分
- 创建 Crunchbase Basic API 密钥
虽然文档指出密钥激活可能需要长达一个小时,但它通常在创建后立即开始工作。
2. 配置爬虫进行API工作
一个重要的 API 功能是限制 - 每分钟不超过 200 个请求,但在免费版本中,这个数字要低得多。考虑到这一点,让我们配置 ConcurrencySettings。由于我们使用官方 API,因此不需要屏蔽 HTTP 客户端。我们将使用带有预设标头的标准“HttpxHttpClient”。
首先,让我们将 API 密钥保存在环境变量中:
pipx install poetry
以下是使用 API 的爬虫配置:
mkdir crunchbase-crawlee && cd crunchbase-crawlee
3. 处理搜索结果
为了使用 API,我们需要两个主要端点:
- get_autocompletes - 用于搜索
- get_entities_organizations__entity_id - 用于获取数据
首先,我们来实现搜索结果处理:
poetry init
4. 提取公司数据
获得公司列表后,我们提取每个公司的详细信息:
poetry add crawlee[parsel,curl-impersonate]
5. 高级基于位置的搜索
如果您需要更灵活的搜索功能,API 提供了特殊的搜索端点。以下是搜索布拉格所有公司的示例:
mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
为了处理搜索结果和分页,我们使用以下处理程序:
# main.py from crawlee import ConcurrencySettings, HttpHeaders from crawlee.crawlers import ParselCrawler from crawlee.http_clients import CurlImpersonateHttpClient from .routes import router async def main() -> None: """The crawler entry point.""" concurrency_settings = ConcurrencySettings(max_concurrency=1, max_tasks_per_minute=50) http_client = CurlImpersonateHttpClient( impersonate='safari17_0', headers=HttpHeaders( { 'accept-language': 'en', 'accept-encoding': 'gzip, deflate, br, zstd', } ), ) crawler = ParselCrawler( request_handler=router, max_request_retries=1, concurrency_settings=concurrency_settings, http_client=http_client, max_requests_per_crawl=30, ) await crawler.run(['https://www.crunchbase.com/www-sitemaps/sitemap-index.xml']) await crawler.export_data_json('crunchbase_data.json')
6.最后,免费API的限制
免费版本的 API 有很大的限制:
- 可用端点的数量有限
- 自动完成功能仅适用于公司搜索
- 并非所有数据字段均可访问
- 有限的搜索过滤功能
考虑对生产级工作进行付费订阅。即使有速率限制,API 也提供了访问 Crunchbase 数据的最可靠方法。
你最好的前进道路是什么?
我们探索了三种不同的方法从 Crunchbase 获取数据:
- 站点地图 - 用于大规模数据收集
- 搜索 - 由于 Cloudflare 保护而难以实现自动化
- 官方API - 商业项目最可靠的解决方案
每种方法都有其优点,但对于大多数项目,我建议使用官方 API,尽管免费版本有其局限性。
完整的源代码可以在我的存储库中找到。有疑问或想讨论实施细节吗?加入我们的 Discord - 我们的开发者社区随时为您提供帮助。
以上是《简易指南》中如何使用 Python 抓取 Crunchbase)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
