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中文网其他相关文章!

Tomergelistsinpython,YouCanusethe操作员,estextMethod,ListComprehension,Oritertools

在Python3中,可以通过多种方法连接两个列表:1)使用 运算符,适用于小列表,但对大列表效率低;2)使用extend方法,适用于大列表,内存效率高,但会修改原列表;3)使用*运算符,适用于合并多个列表,不修改原列表;4)使用itertools.chain,适用于大数据集,内存效率高。

使用join()方法是Python中从列表连接字符串最有效的方法。1)使用join()方法高效且易读。2)循环使用 运算符对大列表效率低。3)列表推导式与join()结合适用于需要转换的场景。4)reduce()方法适用于其他类型归约,但对字符串连接效率低。完整句子结束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的关键特性包括:1.语法简洁易懂,适合初学者;2.动态类型系统,提高开发速度;3.丰富的标准库,支持多种任务;4.强大的社区和生态系统,提供广泛支持;5.解释性,适合脚本和快速原型开发;6.多范式支持,适用于各种编程风格。

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

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