वेब स्क्रैपिंग में डेटा विश्लेषण, अनुसंधान और स्वचालन जैसे कार्यों के लिए वेबसाइटों से डेटा निकालना शामिल है। जबकि पायथन HTTPS अनुरोधों को भेजने और स्क्रैपिंग करने के लिए पुस्तकालयों की पेशकश करता है, पाइक्यूरल के माध्यम से कर्ल का उपयोग करना अधिक कुशल हो सकता है। इस ट्यूटोरियल में, हम प्रदर्शित करेंगे कि वेब पेजों को स्क्रैप करने के लिए पायथन कर्ल का उपयोग कैसे करें। हम उदाहरण प्रदान करेंगे और इसके प्रदर्शन की तुलना अन्य लोकप्रिय पुस्तकालयों जैसे अनुरोधों, HTTPX और AIOHTTP के साथ करेंगे।
पायथन एकीकरण में गोता लगाने से पहले, कर्ल मूल बातें समझना आवश्यक है। आप टर्मिनल में सीधे कर्ल कमांड का उपयोग कर सकते हैं, जैसे कि प्राप्त करने और पोस्ट अनुरोध करने जैसे कार्यों को करने के लिए।
उदाहरण कर्ल कमांड:
# GET अनुरोध
curl -X GET "https://httpbin.org/get"
# POST अनुरोध
curl -X POST "https://httpbin.org/post"
पायथन में कर्ल का उपयोग करने के लिए, हमें Pycurl लाइब्रेरी की आवश्यकता है, जो कर्ल लाइब्रेरी को एक पायथन इंटरफ़ेस प्रदान करता है।
Pycurl स्थापित करना:
pip install pycurl
Pycurl पायथन में HTTP अनुरोधों पर विस्तृत नियंत्रण प्रदान करता है। नीचे एक उदाहरण है कि Pycurl के साथ GET अनुरोध कैसे करें:
import pycurl
import certifi
from io import BytesIO
# प्रतिक्रिया डेटा धारण करने के लिए एक Bytesio ऑब्जेक्ट बनाएं
buffer = BytesIO()
# एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/get')
# आउटपुट डेटा को कैप्चर करने के लिए बफर सेट करें
c.setopt(c.WRITEDATA, buffer)
# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल के लिए पथ सेट करें
c.setopt(c.CAINFO, certifi.where())
# HTTP अनुरोध करें
c.perform()
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
# बफर से प्रतिक्रिया की सामग्री को पुनः प्राप्त करें
body = buffer.getvalue()
# प्रतिक्रिया शरीर को डिकोड और प्रिंट करें
print(body.decode('iso-8859-1'))
पोस्ट अनुरोधों के साथ डेटा भेजना आम है। Pycurl के साथ, पोस्टफील्ड्स विकल्प का उपयोग करें। यहाँ Pycurl के साथ एक पोस्ट अनुरोध करने का एक उदाहरण है:
import pycurl
import certifi
from io import BytesIO
# प्रतिक्रिया डेटा धारण करने के लिए एक Bytesio ऑब्जेक्ट बनाएं
buffer = BytesIO()
# एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
# HTTP पोस्ट अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/post')
# डेटा पोस्ट करने के लिए सेट करें
post_data = 'param1="pycurl"¶m2=article'
c.setopt(c.POSTFIELDS, post_data)
# आउटपुट डेटा को कैप्चर करने के लिए बफर सेट करें
c.setopt(c.WRITEDATA, buffer)
# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल के लिए पथ सेट करें
c.setopt(c.CAINFO, certifi.where())
# HTTP अनुरोध करें
c.perform()
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
# बफर से प्रतिक्रिया की सामग्री को पुनः प्राप्त करें
body = buffer.getvalue()
# प्रतिक्रिया शरीर को डिकोड और प्रिंट करें
print(body.decode('iso-8859-1'))
HTTP अनुरोधों के साथ कस्टम हेडर या प्रमाणीकरण की आवश्यकता होती है। नीचे Pycurl के साथ कस्टम हेडर सेट करने का एक उदाहरण है:
import pycurl
import certifi
from io import BytesIO
# प्रतिक्रिया डेटा धारण करने के लिए एक Bytesio ऑब्जेक्ट बनाएं
buffer = BytesIO()
# एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/get')
# कस्टम HTTP हेडर सेट करें
c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json'])
# आउटपुट डेटा को कैप्चर करने के लिए बफर सेट करें
c.setopt(c.WRITEDATA, buffer)
# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल के लिए पथ सेट करें
c.setopt(c.CAINFO, certifi.where())
# HTTP अनुरोध करें
c.perform()
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
# बफर से प्रतिक्रिया की सामग्री को पुनः प्राप्त करें
body = buffer.getvalue()
# प्रतिक्रिया शरीर को डिकोड और प्रिंट करें
print(body.decode('iso-8859-1'))
API के साथ काम करते समय XML प्रतिक्रियाओं को पार्स करना और संभालना महत्वपूर्ण है। नीचे Pycurl के साथ XML प्रतिक्रियाओं को संभालने का एक उदाहरण है:
# आवश्यक पुस्तकालयों को आयात करें
import pycurl # HTTP अनुरोध करने के लिए पुस्तकालय
import certifi # एसएसएल प्रमाणपत्र सत्यापन के लिए पुस्तकालय
from io import BytesIO # बाइट धाराओं को संभालने के लिए पुस्तकालय
import xml.etree.ElementTree as ET # XML को पार्स करने के लिए पुस्तकालय
# प्रतिक्रिया डेटा रखने के लिए एक बफर बनाएं
buffer = BytesIO()
# एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://www.google.com/sitemap.xml')
# आउटपुट डेटा को कैप्चर करने के लिए बफर सेट करें
c.setopt(c.WRITEDATA, buffer)
# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल के लिए पथ सेट करें
c.setopt(c.CAINFO, certifi.where())
# HTTP अनुरोध करें
c.perform()
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
# बफर से प्रतिक्रिया की सामग्री को पुनः प्राप्त करें
body = buffer.getvalue()
# XML सामग्री को एक एलिमेंट्री ऑब्जेक्ट में पार्स करें
root = ET.fromstring(body.decode('utf-8'))
# XML ट्री के रूट तत्व के टैग और विशेषताओं को प्रिंट करें
print(root.tag, root.attrib)
विश्वसनीय HTTP अनुरोध करने के लिए मजबूत त्रुटि हैंडलिंग आवश्यक है। नीचे Pycurl के साथ त्रुटि से निपटने का एक उदाहरण है:
import pycurl # Pycurl पुस्तकालय आयात करें
import certifi # प्रमाणित पुस्तकालय आयात करें
from io import BytesIO # बाइट धाराओं को संभालने के लिए बाइटिसियो का आयात करें
# एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
buffer = BytesIO()
# HTTP अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# HTTP अनुरोध करें
c.perform()
except pycurl.error as e:
# यदि अनुरोध के दौरान कोई त्रुटि होती है, तो pycurl.error अपवाद को पकड़ें
errno, errstr = e.args # त्रुटि संख्या और त्रुटि संदेश प्राप्त करें
print(f'Error: {errstr} (errno {errno})') # त्रुटि संदेश और त्रुटि संख्या प्रिंट करें
finally:
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # प्रतिक्रिया शरीर को डिकोड और प्रिंट करें
सही कोड URL को https://example.com पर समायोजित करता है, प्रोटोकॉल समस्या को हल करता है। यह अनुरोध को कॉन्फ़िगर करने, इसे करने और प्रारंभिक स्निपेट में त्रुटियों को संभालने की प्रक्रिया को दोहराता है। सफल निष्पादन पर, प्रतिक्रिया निकाय को फिर से डिकोड और मुद्रित किया जाता है। ये स्निपेट PYCURL के साथ HTTP अनुरोधों में उचित URL कॉन्फ़िगरेशन और मजबूत त्रुटि हैंडलिंग के महत्व को उजागर करते हैं।
import pycurl # Pycurl पुस्तकालय आयात करें
import certifi # प्रमाणित पुस्तकालय आयात करें
from io import BytesIO # बाइट धाराओं को संभालने के लिए बाइटिसियो का आयात करें
# कर्ल ऑब्जेक्ट को फिर से शुरू करें
c = pycurl.Curl()
buffer = BytesIO()
# HTTPS का उपयोग करने के लिए URL को सही करें
c.setopt(c.URL, 'https://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())
try:
# सही HTTP अनुरोध करें
c.perform()
except pycurl.error as e:
# यदि अनुरोध के दौरान कोई त्रुटि होती है, तो pycurl.error अपवाद को पकड़ें
errno, errstr = e.args # त्रुटि संख्या और त्रुटि संदेश प्राप्त करें
print(f'Error: {errstr} (errno {errno})') # त्रुटि संदेश और त्रुटि संख्या प्रिंट करें
finally:
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
body = buffer.getvalue()
print(body.decode('iso-8859-1')) # प्रतिक्रिया शरीर को डिकोड और प्रिंट करें
कर्ल HTTP अनुरोध व्यवहार को नियंत्रित करने के लिए कई उन्नत विकल्प प्रदान करता है, जैसे कि कुकीज़ और टाइमआउट को संभालना। नीचे एक उदाहरण है जो Pycurl के साथ उन्नत विकल्पों का प्रदर्शन करता है।
import pycurl # Pycurl पुस्तकालय आयात करें
import certifi # SSL प्रमाणपत्र सत्यापन के लिए सर्टिफिकेट लाइब्रेरी आयात करें
from io import BytesIO # बाइट धाराओं को संभालने के लिए बाइटिसियो का आयात करें
# प्रतिक्रिया डेटा रखने के लिए एक बफर बनाएं
buffer = BytesIO()
#एक कर्ल ऑब्जेक्ट को इनिशियलाइज़ करें
c = pycurl.Curl()
# HTTP अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'http://httpbin.org/cookies')
# एक विशिष्ट कुंजी-मूल्य जोड़ी सेट करके कुकीज़ सक्षम करें
c.setopt(c.COOKIE, 'cookies_key=cookie_value')
# अनुरोध के लिए 30 सेकंड का टाइमआउट निर्धारित करें
c.setopt(c.TIMEOUT, 30)
# आउटपुट डेटा को कैप्चर करने के लिए बफर सेट करें
c.setopt(c.WRITEDATA, buffer)
# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल के लिए पथ सेट करें
c.setopt(c.CAINFO, certifi.where())
# HTTP अनुरोध करें
c.perform()
# संसाधनों को मुक्त करने के लिए कर्ल ऑब्जेक्ट को बंद करें
c.close()
# बफर से प्रतिक्रिया की सामग्री को पुनः प्राप्त करें
body = buffer.getvalue()
# UTF-8 एन्कोडिंग का उपयोग करके प्रतिक्रिया शरीर को डिकोड करें और इसे प्रिंट करें
print(body.decode('utf-8'))
पायथन में HTTP अनुरोधों के साथ काम करते समय, चार लोकप्रिय पुस्तकालय Pycurl, अनुरोध, HTTPX और AIOHTTP हैं। प्रत्येक की अपनी ताकत और कमजोरियां हैं। यहां आपकी आवश्यकताओं के लिए सही उपकरण चुनने में मदद करने के लिए एक तुलना है:
विशेषता | PycURL | Requests | HTTPX | AIOHTTP |
---|---|---|---|---|
उपयोग में आसानी | मध्यम | बहुत आसान | आसान | मध्यम |
प्रदर्शन | उच्च | मध्यम | उच्च | उच्च |
अतुल्यकालिक समर्थन | नहीं | नहीं | हाँ | हाँ |
स्ट्रीमिंग | हाँ | सीमित | हाँ | हाँ |
प्रोटोकॉल समर्थन | व्यापक (कई प्रोटोकॉल का समर्थन करता है) | HTTP/HTTPS | HTTP/HTTPS, HTTP/2, WebSockets | HTTP/HTTPS, WebSockets |
तुलनात्मक विश्लेषण इंगित करता है कि PYCURL उच्च प्रदर्शन और लचीलापन प्रदान करता है, जिससे यह उन्नत उपयोगकर्ताओं के लिए उपयुक्त है, जिन्हें HTTP अनुरोधों के विस्तृत प्रबंधन की आवश्यकता होती है। दूसरी ओर, अनुरोध और HTTPX सरल, अधिक सहज परिदृश्यों के लिए बेहतर अनुकूल हैं। AIOHTTP अतुल्यकालिक कार्यों को संभालने में बाहर खड़ा है, अतुल्यकालिक अनुरोधों के प्रबंधन के लिए प्रभावी उपकरण प्रदान करता है।
सही पुस्तकालय की पसंद आपकी परियोजना की विशिष्ट आवश्यकताओं और आवश्यकताओं पर निर्भर करती है, जिसमें Pycurl उन लोगों की आवश्यकता है जो उन गति और उन्नत क्षमताओं की आवश्यकता के लिए एक उत्कृष्ट विकल्प हैं।
टिप्पणियाँ: 0