Rumah >pembangunan bahagian belakang >Tutorial Python >Membuka kunci Faedah Menggunakan cURL dengan Python
Pengikisan web—seni mengekstrak data dalam talian—adalah teknik yang berkuasa untuk penyelidikan, analisis dan automasi. Python menawarkan pelbagai perpustakaan untuk tujuan ini, tetapi cURL, diakses melalui PycURL, menonjol untuk kelajuan dan ketepatannya. Panduan ini menunjukkan cara memanfaatkan keupayaan cURL dalam Python untuk mengikis web yang cekap. Kami juga akan membandingkannya dengan alternatif popular seperti Permintaan, HTTPX dan AIOHTTP.
Memahami cURL
cURL ialah alat baris arahan untuk menghantar permintaan HTTP. Kepantasan, fleksibiliti dan sokongannya untuk pelbagai protokol menjadikannya aset yang berharga. Contoh asas:
DAPATKAN permintaan: curl -X GET "https://httpbin.org/get"
Permintaan POS: curl -X POST "https://httpbin.org/post"
PycURL meningkatkan kuasa cURL dengan menyediakan kawalan terperinci dalam skrip Python anda.
Langkah 1: Memasang PycURL
Pasang PycURL menggunakan pip:
<code class="language-bash">pip install pycurl</code>
Langkah 2: DAPATKAN Permintaan dengan PycURL
Berikut ialah cara untuk melaksanakan permintaan GET menggunakan PycURL:
<code class="language-python">import pycurl import certifi from io import BytesIO buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://httpbin.org/get') c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))</code>
Kod ini menunjukkan keupayaan PycURL untuk mengurus permintaan HTTP, termasuk menetapkan pengepala dan mengendalikan sijil SSL.
Langkah 3: POST Permintaan dengan PycURL
Permintaan POST, penting untuk penyerahan borang dan interaksi API, adalah sama mudah:
<code class="language-python">import pycurl import certifi from io import BytesIO buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://httpbin.org/post') post_data = 'param1=python¶m2=pycurl' c.setopt(c.POSTFIELDS, post_data) c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))</code>
Contoh ini mempamerkan penghantaran data dengan permintaan POST.
Langkah 4: Pengepala Tersuai dan Pengesahan
PycURL membolehkan anda menambah pengepala tersuai untuk pengesahan atau simulasi ejen pengguna:
<code class="language-python">import pycurl import certifi from io import BytesIO buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://httpbin.org/get') c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json']) c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))</code>
Ini menggambarkan penggunaan pengepala tersuai.
Langkah 5: Mengendalikan Respons XML
PycURL mengendalikan respons XML dengan cekap:
<code class="language-python">import pycurl import certifi from io import BytesIO import xml.etree.ElementTree as ET buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://www.google.com/sitemap.xml') c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() root = ET.fromstring(body.decode('utf-8')) print(root.tag, root.attrib)</code>
Ini menunjukkan penghuraian XML terus dalam aliran kerja anda.
Langkah 6: Pengendalian Ralat Teguh
Pengendalian ralat adalah penting untuk pengikisan yang boleh dipercayai:
<code class="language-python">import pycurl import certifi from io import BytesIO buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'https://example.com') c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) try: c.perform() except pycurl.error as e: errno, errstr = e.args print(f"Error: {errstr} (errno {errno})") finally: c.close() body = buffer.getvalue() print(body.decode('iso-8859-1'))</code>
Kod ini memastikan pengendalian ralat yang anggun.
Langkah 7: Ciri Lanjutan: Kuki dan Tamat Masa
PycURL menyokong ciri lanjutan seperti kuki dan tamat masa:
<code class="language-python">import pycurl import certifi from io import BytesIO buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, 'http://httpbin.org/cookies') c.setopt(c.COOKIE, 'user_id=12345') c.setopt(c.TIMEOUT, 30) c.setopt(c.WRITEDATA, buffer) c.setopt(c.CAINFO, certifi.where()) c.perform() c.close() body = buffer.getvalue() print(body.decode('utf-8'))</code>
Contoh ini menunjukkan penggunaan kuki dan menetapkan tamat masa.
Langkah 8: PycURL lwn. Perpustakaan Lain
PycURL menawarkan prestasi dan fleksibiliti yang unggul, tetapi mempunyai keluk pembelajaran yang lebih curam dan tidak mempunyai sokongan tak segerak. Permintaan adalah mesra pengguna tetapi kurang berprestasi. HTTPX dan AIOHTTP cemerlang dalam operasi tak segerak dan sokongan protokol moden. Pilih perpustakaan yang paling sesuai dengan keperluan dan kerumitan projek anda.
Kesimpulan
PycURL menyediakan gabungan kelajuan dan kawalan yang berkuasa untuk tugas mengikis web lanjutan. Walaupun ia memerlukan pemahaman yang lebih mendalam daripada perpustakaan yang lebih ringkas, faedah prestasi menjadikannya pilihan yang berbaloi untuk projek yang menuntut.
Atas ialah kandungan terperinci Membuka kunci Faedah Menggunakan cURL dengan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!