सभी को नमस्कार, इस लेख में हम आज लोकप्रिय प्रोग्रामिंग भाषा गो में एक साइट से डेटा एकत्र करने के लिए लिखे गए एक छोटे से नमूना कोड को देखेंगे।यह लेख उन लोगों के लिए विशेष रूप से दिलचस्प होगा जिन्होंने गो के बारे में बहुत कुछ सुना है, लेकिन अभी तक इसे अपने दम पर करने की कोशिश नहीं की है।आंतरिक परियोजनाओं में से एक के लिए, हमें उन फिल्मों के बारे में डेटा एकत्र करने की आवश्यकता है जो किराए पर ली जा रही हैं और शो का शेड्यूल है, अब हम पार्सर के पहले (सबसे सरल) संस्करण पर विचार करेंगे, जिसके साथ यह सब शुरू हुआ।उन लोगों के लिए जो लेख कोड पढ़ने के लिए बहुत आलसी हैं, मैं तुरंत रिपॉजिटरी का लिंक प्रदान करता हूं ।अपने पहले संस्करण में, पार्सर केवल निम्नलिखित जानकारी एकत्र करने में सक्षम था:- एक सिनेमा में सत्र के बारे में,
- विस्तृत विवरण,
- शीर्षक,
- स्टूडियो,
और इसे JSON में सेव करें। प्रारंभ में, आपको पार्सिंग के लिए उपयुक्त पुस्तकालय का चयन करने की आवश्यकता है।Google क्वेरी के लिए बड़ी संख्या में विकल्प देता है `गोलंग वेब स्क्रैपिंग`, उनमें से कई इस सूची में परिलक्षित होते हैं , मैं आपको इसके साथ खुद को परिचित करने की सलाह देता हूं, मैंने geziyor को चुना , क्योंकि यह जेएस रेंडरिंग का समर्थन करता है (जो, वैसे, हम इस में उपयोग नहीं करेंगे। उदाहरण, हालांकि, यह सुविधा साइटों को पार्स करते समय बहुत उपयोगी है) और उपयोग करने के लिए काफी सरल है।इसलिए, लाइब्रेरी का चयन किया जाता है, अगला चरण इसे स्थापित करना और कोड में इसका उपयोग करना शुरू करना है।पुस्तकालय स्थापित करना बेहद सरल है:go get -u github.com/geziyor/geziyor
अब हम लेखन कोड पर चलते हैं।मुख्य फ़ंक्शन के शरीर के अंदर, हम पार्सर कहते हैं, इसे उस पृष्ठ का URL दें, जिससे हम डेटा एकत्र करना शुरू करेंगे और संकेत देंगे कि हम परिणाम को JSON फ़ाइल में निर्यात करना चाहते हैं:
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://kinoteatr.ru/raspisanie-kinoteatrov/city/#"},
ParseFunc: parseMovies,
Exporters: []export.Exporter{&export.JSON{}},
}).Start()
}
एक शुरुआत की गई है, लेकिन डेटा एकत्र करने के लिए पर्याप्त तर्क नहीं है, इसके लिए हमें पार्सेमोवी फ़ंक्शन को लागू करने की आवश्यकता है ।संग्रह तर्क निम्नानुसार होगा:- मूवी जानकारी युक्त एक ब्लॉक की खोज करें,
- इस ब्लॉक के अंदर सभी सत्रों के बारे में जानकारी का संग्रह,
- फिल्म और फिल्म स्टूडियो के नाम का संग्रह,
- फिल्म के बारे में विस्तृत जानकारी के साथ एक पृष्ठ का लिंक इकट्ठा करना,
- इस पृष्ठ से विवरण का संग्रह
आइए इस फ़ंक्शन के कार्यान्वयन के लिए आगे बढ़ें।
यहां, फिल्म के बारे में जानकारी वाले सभी ब्लॉकों को आगे की प्रक्रिया के लिए चुना जाता है।func parseMovies(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find("div.shedule_movie").Each(func(i int, s *goquery.Selection) {
इस तरह, सत्रों के बारे में जानकारी एकत्र की जाती है, और फिर इसे एक व्यक्ति के लिए सुविधाजनक रूप में लाया जाता है (हम एक नई पंक्ति पर अतिरिक्त रिक्त स्थान और संकेत हटाते हैं)।
var sessions = strings.Split(s.Find(".shedule_session_time").Text(), " \n ")
sessions = sessions[:len(sessions)-1]
for i := 0; i < len(sessions); i++ {
sessions[i] = strings.Trim(sessions[i], "\n ")
}
कोड का यह ब्लॉक फिल्म के बारे में विस्तृत जानकारी के साथ एक पेज प्राप्त करने और उसका विवरण प्राप्त करने के लिए जिम्मेदार है।
if href, ok := s.Find("a.gtm-ec-list-item-movie").Attr("href"); ok {
g.Get(r.JoinURL(href), func(_g *geziyor.Geziyor, _r *client.Response) {
description = _r.HTMLDoc.Find("span.announce p.movie_card_description_inform").Text()
description = strings.ReplaceAll(description, "\t", "")
description = strings.ReplaceAll(description, "\n", "")
description = strings.TrimSpace(description)
यह JSON फ़ाइल पर परिणामों को निर्यात करने के लिए API को कॉल करता है।
g.Exports <- map[string]interface{}{
"title": strings.TrimSpace(s.Find("span.movie_card_header.title").Text()),
"subtitle": strings.TrimSpace(s.Find("span.sub_title.shedule_movie_text").Text()),
"sessions": sessions,
"description": description,
}
हुर्रे, आप कर रहे हैं! यह केवल कोड के लिखित ब्लॉकों को एक साथ जोड़ना और पार्स करना शुरू करने के लिए बना हुआ है।यह पार्सर कैसे काम करता है, हम टर्मिनल में पृष्ठों की सफल प्राप्ति पर संदेश देखते हैं, यह सुविधाजनक है।
और इसी तरह से पार्सिंग का परिणाम दिखता है।
लेख पढ़ने के लिए धन्यवाद, गो पर प्यार प्रोग्रामिंग।