Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk mengikis Crunchbase menggunakan Python dalam Panduan Mudah)

Bagaimana untuk mengikis Crunchbase menggunakan Python dalam Panduan Mudah)

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-16 12:57:59361semak imbas

Pembangun Python mengetahui latihan ini: anda memerlukan data syarikat yang boleh dipercayai, dan Crunchbase memilikinya. Panduan ini menunjukkan kepada anda cara membina pengikis Crunchbase yang berkesan dalam Python yang memberikan anda data yang anda perlukan.

Crunchbase menjejaki butiran yang penting: lokasi, tumpuan perniagaan, pengasas dan sejarah pelaburan. Pengekstrakan manual daripada set data yang begitu besar tidak praktikal -automasi adalah penting untuk mengubah maklumat ini kepada format yang boleh dianalisis.

Menjelang akhir blog ini, kami akan meneroka tiga cara berbeza untuk mengekstrak data daripada Crunchbase menggunakan Crawlee untuk Python. Kami akan melaksanakan sepenuhnya dua daripadanya dan membincangkan spesifik dan cabaran yang ketiga. Ini akan membantu kami memahami dengan lebih baik betapa pentingnya memilih sumber data yang betul dengan betul.

Nota: Panduan ini datang daripada pembangun dalam komuniti kami yang semakin berkembang. Pernahkah anda membina projek menarik dengan Crawlee? Sertai kami di Discord untuk berkongsi pengalaman dan idea blog anda - kami menghargai sumbangan daripada pembangun seperti anda ini.

Langkah utama yang akan kami bincangkan:

  1. Persediaan projek
  2. Memilih sumber data
  3. Melaksanakan perangkak berasaskan peta laman
  4. Analisis pendekatan berasaskan carian dan batasannya
  5. Melaksanakan perangkak API rasmi
  6. Kesimpulan dan akses repositori

Prasyarat

  • Python 3.9 atau lebih tinggi
  • Kebiasaan dengan konsep mengikis web
  • Merangkak untuk Python v0.5.0
  • puisi v2.0 atau lebih tinggi

Persediaan projek

Sebelum kita mula mengikis, kita perlu menyediakan projek kita. Dalam panduan ini, kami tidak akan menggunakan templat perangkak (Penulis Drama dan Beautifulsoup), jadi kami akan menyediakan projek secara manual.

  1. Pasang Puisi

    pipx install poetry
    
  2. Buat dan navigasi ke folder projek.

    mkdir crunchbase-crawlee && cd crunchbase-crawlee
    
  3. Mulakan projek menggunakan Puisi, biarkan semua medan kosong.

    poetry init
    

    Apabila digesa:

    • Untuk "versi Python Serasi", masukkan: >={versi Python anda},<4.0 (Contohnya, jika anda menggunakan Python 3.10, masukkan: >=3.10,<4.0)
    • Biarkan semua medan lain kosong dengan menekan Enter
    • Sahkan penjanaan dengan menaip "ya"
  4. Tambah dan pasang Crawlee dengan kebergantungan yang diperlukan pada projek anda menggunakan Puisi.

    poetry add crawlee[parsel,curl-impersonate]
    
  5. Lengkapkan persediaan projek dengan mencipta struktur fail standard untuk projek Crawlee untuk Python.

    mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}
    

Selepas menyediakan struktur projek asas, kami boleh meneroka kaedah yang berbeza untuk mendapatkan data daripada Crunchbase.

Memilih sumber data

Walaupun kami boleh mengekstrak data sasaran terus daripada halaman syarikat, kami perlu memilih cara terbaik untuk menavigasi tapak.

Pemeriksaan teliti struktur Crunchbase menunjukkan bahawa kami mempunyai tiga pilihan utama untuk mendapatkan data:

  1. Peta laman - untuk melintasi tapak yang lengkap.
  2. Carian - untuk pengumpulan data yang disasarkan.
  3. API Rasmi - kaedah disyorkan.

Mari kita periksa setiap pendekatan ini secara terperinci.

Mengikis Crunchbase menggunakan peta laman dan Crawlee untuk Python

Peta laman ialah cara standard navigasi tapak yang digunakan oleh perangkak seperti Google, Ahrefs dan enjin carian lain. Semua perangkak mesti mengikut peraturan yang diterangkan dalam robots.txt.

Mari kita lihat struktur Peta Laman Crunchbase:

Sitemap first lvl

Seperti yang anda lihat, pautan ke halaman organisasi terletak di dalam fail Peta Laman peringkat kedua, yang dimampatkan menggunakan gzip.

Struktur salah satu daripada fail ini kelihatan seperti ini:

Sitemap second lvl

Medan lastmod amat penting di sini. Ia membolehkan pengesanan syarikat yang telah mengemas kini maklumat mereka sejak pengumpulan data sebelumnya. Ini amat berguna untuk kemas kini data biasa.

1. Mengkonfigurasi perangkak untuk mengikis

Untuk bekerja dengan tapak, kami akan menggunakan CurlImpersonateHttpClient, yang menyamar sebagai penyemak imbas Safari. Walaupun pilihan ini mungkin kelihatan tidak dijangka untuk bekerja dengan peta laman, ia diperlukan oleh ciri perlindungan Crunchbase.

Alasannya ialah Crunchbase menggunakan Cloudflare untuk melindungi daripada akses automatik. Ini jelas kelihatan apabila menganalisis trafik pada halaman syarikat:

Cloudflare Link

Ciri yang menarik ialah challenges.cloudflare dilaksanakan selepas memuatkan dokumen dengan data. Ini bermakna kami menerima data dahulu, dan kemudian JavaScript menyemak sama ada kami bot. Jika cap jari klien HTTP kami cukup serupa dengan penyemak imbas sebenar, kami akan berjaya menerima data tersebut.

Cloudflare juga menganalisis trafik pada peringkat peta laman. Jika perangkak kami tidak kelihatan sah, akses akan disekat. Itulah sebabnya kami menyamar sebagai pelayar sebenar.

Untuk mengelakkan sekatan akibat rangkak yang terlalu agresif, kami akan mengkonfigurasi ConcurrencySettings.

Apabila menskalakan pendekatan ini, anda mungkin memerlukan proksi. Maklumat terperinci tentang persediaan proksi boleh didapati dalam dokumentasi.

Kami akan menyimpan hasil pengikisan kami dalam format JSON. Begini rupa konfigurasi perangkak asas:

pipx install poetry

2. Melaksanakan navigasi peta laman

Navigasi peta laman berlaku dalam dua peringkat. Pada peringkat pertama, kita perlu mendapatkan senarai semua fail yang mengandungi maklumat organisasi:

pipx install poetry

Pada peringkat kedua, kami memproses fail peta laman peringkat kedua yang disimpan dalam format gzip. Ini memerlukan pendekatan khas kerana data perlu dinyahmampat dahulu:

mkdir crunchbase-crawlee && cd crunchbase-crawlee

3. Mengekstrak dan menyimpan data

Setiap halaman syarikat mengandungi sejumlah besar maklumat. Untuk tujuan demonstrasi, kami akan menumpukan pada medan utama: Nama Syarikat, Penerangan Ringkas, Tapak Web dan Lokasi.

Salah satu kelebihan Crunchbase ialah semua data disimpan dalam format JSON dalam halaman:

Company Data

Ini memudahkan pengekstrakan data dengan ketara - kami hanya perlu menggunakan satu pemilih Xpath untuk mendapatkan JSON, dan kemudian gunakan jmespath untuk mengekstrak medan yang diperlukan:

poetry init

Data yang dikumpul disimpan dalam Crawlee untuk storan dalaman Python menggunakan kaedah context.push_data. Apabila perangkak selesai, kami mengeksport semua data yang dikumpul ke fail JSON:

poetry add crawlee[parsel,curl-impersonate]

4. Menjalankan projek

Dengan semua komponen tersedia, kami perlu mencipta titik masuk untuk perangkak kami:

mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}

Laksanakan perangkak menggunakan Puisi:

# 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')




<h3>
  
  
  5. Akhir sekali, ciri-ciri menggunakan perangkak peta laman
</h3>

<p>Pendekatan peta laman mempunyai kelebihan dan batasannya yang tersendiri. Ia sesuai dalam kes berikut:</p>

<ul>
<li>Apabila anda perlu mengumpul data tentang semua syarikat di platform</li>
<li>Apabila tiada kriteria pemilihan syarikat khusus</li>
<li>Jika anda mempunyai masa dan sumber pengiraan yang mencukupi</li>
</ul>

<p>Walau bagaimanapun, terdapat had penting untuk dipertimbangkan:</p>

<ul>
<li>Hampir tiada keupayaan untuk menapis data semasa pengumpulan</li>
<li>Memerlukan pemantauan berterusan blok Cloudflare</li>
<li>Menskalakan penyelesaian memerlukan pelayan proksi, yang meningkatkan kos projek</li>
</ul>

<h2>
  
  
  Menggunakan carian untuk mengikis Crunchbase
</h2>

<p>Keterbatasan pendekatan peta laman mungkin menunjukkan carian sebagai penyelesaian seterusnya. Walau bagaimanapun, Crunchbase menggunakan langkah keselamatan yang lebih ketat pada fungsi cariannya berbanding halaman awamnya.</p>

<p>Perbezaan utama terletak pada cara perlindungan Cloudflare berfungsi. Semasa kami menerima data sebelum semakan challenges.cloudflare apabila mengakses halaman syarikat, API carian memerlukan kuki yang sah yang telah melepasi semakan ini.</p>

<p>Mari sahkan perkara ini dalam amalan. Buka pautan berikut dalam mod Inkognito:<br>
</p>

<pre class="brush:php;toolbar:false"># 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)

Apabila menganalisis trafik, kita akan melihat corak berikut:

Search Protect

Jujukan acara di sini ialah:

  1. Pertama, halaman disekat dengan kod 403
  2. Kemudian ujian challenges.cloudflare dilakukan
  3. Hanya selepas berjaya melepasi semakan, kami menerima data dengan kod 200

Mengautomasikan proses ini memerlukan penyemak imbas tanpa kepala yang mampu memintas Cloudflare Turnstile. Versi semasa Crawlee for Python (v0.5.0) tidak menyediakan fungsi ini, walaupun ia dirancang untuk pembangunan masa hadapan.

Anda boleh melanjutkan keupayaan Crawlee untuk Python dengan menyepadukan Camoufox mengikut contoh ini.

Bekerja dengan API Crunchbase rasmi

Crunchbase menyediakan API percuma dengan fungsi asas. Pengguna langganan berbayar mendapat akses data yang diperluaskan. Dokumentasi lengkap untuk titik akhir yang tersedia boleh didapati dalam spesifikasi API rasmi.

1. Menyediakan akses API

Untuk mula bekerja dengan API, ikut langkah berikut:

  1. Buat akaun Crunchbase
  2. Pergi ke bahagian Integrasi
  3. Buat kunci API Asas Crunchbase

Walaupun dokumentasi menyatakan bahawa pengaktifan kunci mungkin mengambil masa sehingga satu jam, ia biasanya mula berfungsi sebaik sahaja selepas penciptaan.

2. Mengkonfigurasi perangkak untuk kerja API

Ciri API yang penting ialah had - tidak lebih daripada 200 permintaan seminit, tetapi dalam versi percuma, jumlah ini jauh lebih rendah. Dengan mengambil kira perkara ini, mari kita konfigurasikan ConcurrencySettings. Memandangkan kami sedang bekerja dengan API rasmi, kami tidak perlu menutup klien HTTP kami. Kami akan menggunakan 'HttpxHttpClient' standard dengan pengepala pratetap.

Pertama, mari kita simpan kunci API dalam pembolehubah persekitaran:

pipx install poetry

Begini rupa konfigurasi perangkak untuk bekerja dengan API:

mkdir crunchbase-crawlee && cd crunchbase-crawlee

3. Memproses hasil carian

Untuk bekerja dengan API, kami memerlukan dua titik akhir utama:

  1. get_autocompletes - untuk mencari
  2. get_entities_organizations__entity_id - untuk mendapatkan data

Pertama, mari kita laksanakan pemprosesan hasil carian:

poetry init

4. Mengekstrak data syarikat

Selepas mendapat senarai syarikat, kami mengeluarkan maklumat terperinci tentang setiap syarikat:

poetry add crawlee[parsel,curl-impersonate]

5. Carian berasaskan lokasi lanjutan

Jika anda memerlukan keupayaan carian yang lebih fleksibel, API menyediakan titik akhir carian khas. Berikut ialah contoh carian untuk semua syarikat di Prague:

mkdir crunchbase-crawlee && touch crunchbase-crawlee/{__init__.py,__main__.py,main.py,routes.py}

Untuk memproses hasil carian dan penomboran, kami menggunakan pengendali berikut:

# 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. Akhir sekali, had API percuma

Versi percuma API mempunyai had yang ketara:

  • Set terhad titik akhir yang tersedia
  • Fungsi autolengkap hanya berfungsi untuk carian syarikat
  • Bukan semua medan data boleh diakses
  • Keupayaan penapisan carian terhad

Pertimbangkan langganan berbayar untuk kerja peringkat pengeluaran. API menyediakan cara yang paling boleh dipercayai untuk mengakses data Crunchbase, walaupun dengan kekangan kadarnya.

Apakah laluan terbaik anda ke hadapan?

Kami telah meneroka tiga pendekatan berbeza untuk mendapatkan data daripada Crunchbase:

  1. Peta laman - untuk pengumpulan data berskala besar
  2. Cari - sukar untuk diautomasikan kerana perlindungan Cloudflare
  3. API Rasmi - penyelesaian yang paling boleh dipercayai untuk projek komersial

Setiap kaedah mempunyai kelebihannya, tetapi untuk kebanyakan projek, saya mengesyorkan menggunakan API rasmi walaupun terhad dalam versi percuma.

Kod sumber lengkap tersedia dalam repositori saya. Ada soalan atau ingin membincangkan butiran pelaksanaan? Sertai Discord kami - komuniti pembangun kami sedia membantu.

Atas ialah kandungan terperinci Bagaimana untuk mengikis Crunchbase menggunakan Python dalam Panduan Mudah). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn