परिचय: क्यों Go पार्सिंग की दुनिया में आपका नया सबसे अच्छा दोस्त है
\n\nएक स्थिति की कल्पना करें: आपको सैकड़ों वेब पेजों से जानकारी इकट्ठा करनी है, उसे प्रोसेस करना है और एक संरचित रूप में सहेजना है। Python अपने BeautifulSoup और Scrapy के साथ एक स्पष्ट विकल्प लगता है। लेकिन क्या होगा अगर मैं आपसे कहूं कि एक ऐसी भाषा है जो इसे तेज़ी से, आसानी से और कम मेमोरी खपत के साथ करती है? मिलिए — Go में डेटा पार्सिंग और स्क्रैपिंग से।
\n\nGo (या Golang) Google की सिर्फ एक फैशनेबल भाषा नहीं है। यह एक उपकरण है जो पार्सर लिखने को एक दिनचर्या से आनंद में बदल देता है। अंतर्निहित समवर्तीता समर्थन (गोरूटीन) के कारण, आप बिना ब्लॉकिंग की चिंता किए समानांतर रूप से दर्जनों पेजों को प्रोसेस कर सकते हैं। और इसकी सख्त टाइपिंग और संकलन गति कोड को विश्वसनीय और उत्पादक बनाती है।
\n\nइस लेख में, हम बोरिंग तरीके से फीचर्स की सूची नहीं बनाएंगे। हम Go में एक वास्तविक पार्सर लिखेंगे, प्रमुख लाइब्रेरीज़ को समझेंगे और दिखाएंगे कि कैसे ऐसे स्क्रैपर बनाएं जो लोड को संभाल सकें। यदि आप Go में वेबसाइटों को तेज़ी और कुशलता से पार्स करना सीखना चाहते हैं, तो आप सही जगह पर हैं।
\n\nपार्सिंग और स्क्रैपिंग क्या है, और आपको Go की आवश्यकता क्यों है?
\n\nचलिए तुरंत बात को स्पष्ट करते हैं। वेब स्क्रैपिंग (scraping) वेब पेजों से डेटा निकालने की प्रक्रिया है। पार्सिंग (parsing) आवश्यक जानकारी निकालने के लिए प्राप्त HTML या JSON का विश्लेषण है। साथ में, वे डेटा संग्रह के लिए एक शक्तिशाली जोड़ी बनाते हैं।
\n\nआपको आदतन Python के बजाय Go में पार्सिंग क्यों चुनना चाहिए?
\n\n- \n
- निष्पादन गति: Go एक बाइनरी में संकलित होता है जो व्याख्यात्मक Python की तुलना में कई गुना तेज़ चलता है। लाखों पेजों को प्रोसेस करते समय यह महत्वपूर्ण है। \n
- मेमोरी बचत: गोरूटीन (हल्के थ्रेड) OS थ्रेड्स के विपरीत केवल कुछ किलोबाइट की खपत करते हैं। आप मेमोरी लीक के जोखिम के बिना हजारों समानांतर अनुरोध चला सकते हैं। \n
- डिप्लॉय की सरलता: संकलित बाइनरी को डिपेंडेंसी इंस्टॉल करने की आवश्यकता नहीं होती है। इसे सर्वर पर डालें और पार्सर काम करने के लिए तैयार है। \n
- अंतर्निहित HTTP क्लाइंट: Go की मानक लाइब्रेरी में पहले से ही नेटवर्क के साथ काम करने के लिए सब कुछ शामिल है। कोई अतिरिक्त डिपेंडेंसी नहीं। \n
तो, यदि आपको एक Go पार्सर चाहिए जो घड़ी की तरह काम करे — तो आपने सही भाषा चुनी है।
\n\nउपकरण: Colly और Goquery — आपका जेंटलमैन सेट
\n\nकोड लिखने से पहले, आइए मुख्य उपकरणों से परिचित हों। Golang वेब स्क्रैपिंग के लिए दो "स्वर्णिम" लाइब्रेरीज़ हैं:
\n\nColly — एसिंक्रोनस स्क्रैपिंग का राजा
\nColly एक स्क्रैपिंग फ्रेमवर्क है जिसने सर्वोत्तम प्रथाओं को शामिल किया है। यह समानांतर अनुरोध, कुकी प्रबंधन, अनुरोधों के बीच स्वचालित प्रतीक्षा (ताकि आप पर प्रतिबंध न लगे) और यहां तक कि कैशिंग का भी समर्थन करता है। Colly HTML पार्सिंग के लिए Goquery के ऊपर काम करता है।
\n\nGoquery — Go के लिए jQuery
\nGoquery एक लाइब्रेरी है जो आपको CSS सेलेक्टर का उपयोग करके HTML एलिमेंट्स चुनने की अनुमति देती है, ठीक वैसे ही जैसे आप jQuery में करते हैं। यदि आपने कभी JavaScript में $(".my-class").text() लिखा है, तो Goquery आपको परिचित लगेगा।
इंस्टॉलेशन सरल है:
\ngo get github.com/gocolly/colly/v2\ngo get github.com/PuerkitoBio/goquery\n\nअब हमारे पास Go पार्सर बनाने के लिए सब कुछ है।
\n\nएक वास्तविक पार्सर लिखना: समाचार शीर्षक एकत्र करना
\n\nउदाहरण के लिए, आइए एक स्क्रैपर लिखें जो एक एग्रीगेटर साइट (जैसे Hacker News या कोई अन्य समाचार फ़ीड) से समाचार शीर्षक एकत्र करता है। हम HTML को पार्स करेंगे और परिणाम कंसोल पर प्रदर्शित करेंगे।
\n\nएक फ़ाइल main.go बनाएं और निम्नलिखित कोड लिखें:
package main\n\nimport (\n\t"fmt"\n\t"log"\n\n\t"github.com/gocolly/colly/v2"\n)\