Python 開発者はそのドリルを知っています。信頼できる企業データが必要です。Crunchbase はそれを持っています。このガイドでは、必要なデータを取得する効果的な Crunchbase スクレーパーを Python で構築する方法を説明します。
Crunchbase は、場所、ビジネスの焦点、創設者、投資履歴など、重要な詳細を追跡します。このような大規模なデータセットから手動で抽出するのは現実的ではありません。この情報を分析可能な形式に変換するには自動化が不可欠です。
このブログの最後までに、Crawlee for Python を使用して Crunchbase からデータを抽出する 3 つの異なる方法を検討します。そのうち 2 つを完全に実装し、3 つ目の詳細と課題について説明します。これは、適切なデータ ソースを適切に選択することがいかに重要であるかをより深く理解するのに役立ちます。
注: このガイドは、成長を続けるコミュニティの開発者から提供されたものです。 Crawlee で興味深いプロジェクトを構築しましたか? Discord に参加して、あなたの経験やブログのアイデアを共有してください。私たちはあなたのような開発者からのこれらの貢献を高く評価しています。
これから説明する主な手順:
- プロジェクトのセットアップ
- データソースの選択
- サイトマップベースのクローラーの実装
- 検索ベースのアプローチとその限界の分析
- 公式 API クローラーの実装
- 結論とリポジトリへのアクセス
前提条件
- Python 3.9 以降
- Web スクレイピングの概念についての知識
- 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 キーを押して、他のフィールドはすべて空のままにしておきます
- 「はい」と入力して世代を確認します
-
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 の構造を注意深く調べると、データを取得するには 3 つの主なオプションがあることがわかります。
- サイトマップ - 完全なサイト横断用。
- 検索 - 対象を絞ったデータ収集用。
- 公式 API - 推奨される方法。
これらのアプローチをそれぞれ詳しく調べてみましょう。
サイトマップと Crawlee for Python を使用した Crunchbase のスクレイピング
サイトマップは、Google、Ahrefs、その他の検索エンジンなどのクローラーで使用されるサイト ナビゲーションの標準的な方法です。すべてのクローラーは、robots.txt に記述されているルールに従う必要があります。
Crunchbase のサイトマップの構造を見てみましょう:
ご覧のとおり、組織ページへのリンクは、gzip を使用して圧縮された第 2 レベルのサイトマップ ファイル内にあります。
これらのファイルの 1 つの構造は次のようになります:
ここでは、lastmod フィールドが特に重要です。前回のデータ収集以降にどの企業が情報を更新したかを追跡できます。これは、定期的なデータ更新に特に役立ちます。
1. スクレイピング用のクローラーの構成
このサイトを操作するには、Safari ブラウザーを偽装する CurlImpersonateHttpClient を使用します。サイトマップを操作する場合、この選択は予想外に思えるかもしれませんが、Crunchbase の保護機能によって必要となります。
その理由は、Crunchbase が自動アクセスから保護するために Cloudflare を使用しているためです。これは、企業ページのトラフィックを分析するとはっきりとわかります:
興味深い機能は、データを含むドキュメントをロードした後にChallenges.cloudflareが実行されることです。これは、最初にデータを受信し、その後 JavaScript がボットかどうかをチェックすることを意味します。 HTTP クライアントのフィンガープリントが実際のブラウザと十分に類似している場合、データは正常に受信されます。
Cloudflare はサイトマップ レベルでもトラフィックを分析します。クローラーが正規のものではないと思われる場合、アクセスはブロックされます。これが、実際のブラウザになりすます理由です。
過度に積極的なクロールによるブロックを防ぐために、ConcurrencySettings を構成します。
このアプローチを拡張する場合、プロキシが必要になる可能性があります。プロキシ設定の詳細については、ドキュメントを参照してください。
スクレイピング結果を JSON 形式で保存します。クローラーの基本的な構成は次のとおりです。
pipx install poetry
2. サイトマップナビゲーションの実装
サイトマップのナビゲーションは 2 つの段階で行われます。最初の段階では、組織情報を含むすべてのファイルのリストを取得する必要があります:
pipx install poetry
第 2 段階では、gzip 形式で保存された第 2 レベルのサイトマップ ファイルを処理します。最初にデータを解凍する必要があるため、これには特別なアプローチが必要です:
mkdir crunchbase-crawlee && cd crunchbase-crawlee
3. データの抽出と保存
各企業のページには大量の情報が含まれています。デモンストレーションの目的で、会社名、簡単な説明、Web サイト、場所などの主要フィールドに焦点を当てます。
Crunchbase の利点の 1 つは、すべてのデータがページ内に JSON 形式で保存されることです。
これにより、データ抽出が大幅に簡素化されます。必要なのは、1 つの 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 でブロックされています
- その後、challenge.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 キーを作成する
ドキュメントには、キーのアクティブ化に最大 1 時間かかる場合があると記載されていますが、通常は作成後すぐに機能し始めます。
2. API 作業用のクローラーの構成
重要な API 機能は、1 分あたり 200 リクエスト以下という制限です。しかし、無料バージョンでは、この数は大幅に低くなります。これを考慮して、ConcurrencySettings を構成しましょう。公式 API を使用しているため、HTTP クライアントをマスクする必要はありません。プリセットヘッダーを持つ標準の「HttpxHttpClient」を使用します。
まず、API キーを環境変数に保存しましょう:
pipx install poetry
API を操作するためのクローラー設定は次のようになります。
mkdir crunchbase-crawlee && cd crunchbase-crawlee
3. 検索結果の処理
API を使用するには、次の 2 つの主要なエンドポイントが必要です。
- 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 からデータを取得するための 3 つの異なるアプローチを検討してきました。
- サイトマップ - 大規模なデータ収集用
- 検索 - Cloudflare 保護のため自動化が困難
- 公式 API - 商用プロジェクト向けの最も信頼性の高いソリューション
それぞれの方法には利点がありますが、ほとんどのプロジェクトでは、無料版の制限にもかかわらず、公式 API を使用することをお勧めします。
完全なソース コードは私のリポジトリで入手できます。質問がある場合、または実装の詳細について話し合いたい場合は、 Discord に参加してください - 開発者のコミュニティがお手伝いします。
以上が簡単ガイドのPythonを使用してCrunchbaseをスクレイピングする方法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Tomergelistsinpython、あなたはオペレーター、extendmethod、listcomfulting、olitertools.chain、それぞれの特異的advantages:1)operatorissimplebutlessforlargelist;

Python 3では、2つのリストをさまざまな方法で接続できます。1)小さなリストに適したオペレーターを使用しますが、大きなリストには非効率的です。 2)メモリ効率が高い大規模なリストに適した拡張方法を使用しますが、元のリストは変更されます。 3)元のリストを変更せずに、複数のリストをマージするのに適した *オペレーターを使用します。 4)Itertools.chainを使用します。これは、メモリ効率が高い大きなデータセットに適しています。

Join()メソッドを使用することは、Pythonのリストから文字列を接続する最も効率的な方法です。 1)join()メソッドを使用して、効率的で読みやすくなります。 2)サイクルは、大きなリストに演算子を非効率的に使用します。 3)リスト理解とJoin()の組み合わせは、変換が必要なシナリオに適しています。 4)redoce()メソッドは、他のタイプの削減に適していますが、文字列の連結には非効率的です。完全な文は終了します。

pythonexexecutionistheprocessoftransforningpythoncodeintoexecutabletructions.1)interpreterreadSthecode、変換intobytecode、thepythonvirtualmachine(pvm)executes.2)theglobalinterpreeterlock(gil)管理委員会、

Pythonの主な機能には次のものがあります。1。構文は簡潔で理解しやすく、初心者に適しています。 2。動的タイプシステム、開発速度の向上。 3。複数のタスクをサポートするリッチ標準ライブラリ。 4.強力なコミュニティとエコシステム、広範なサポートを提供する。 5。スクリプトと迅速なプロトタイピングに適した解釈。 6.さまざまなプログラミングスタイルに適したマルチパラダイムサポート。

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 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 Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
