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,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

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


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中