मैं अजगर HTMLParser लाइब्रेरी का उपयोग करके एक HTML पृष्ठ से एक मान प्राप्त करने का प्रयास कर रहा हूं। यह मान जिसे मैं पकड़ना चाहता हूं, वह इस html तत्व के भीतर है:
... यह अब तक मेरा HTMLParser वर्ग है:
वर्ग लिंकपर्स (HTMLParser.HTMLParser): def __init __ (स्वयं): HTMLParser.HTMLParser नामित == 'आईडी' और मान == 'रिमॉजिटरी': यदि टैग! = 'Div': नाम के लिए वापसी, गुण में मान: __इनट __ (स्वयं) self.seen = {} def handle_starttag (self, tag, attributes): if tag! : #print मान रिटर्न def हैंन्ड_डेटा (स्वयं, डेटा): प्रिंट डेटा p = LinksParser () f = urllib.urlopen ("http://domain.com/somepage.html") html = f.read () p.feed (Html) p.close ()
क्या कोई मुझे सही दिशा में बता सकता है? मैं वर्ग की कार्यक्षमता को 20 मान प्राप्त करना चाहता हूं।
क्लास लिंकपर्स (HTMLParser.HTMLParser) : Def __init __ (स्वयं): HTMLParser.HTMLParser .__ init __ (स्वयं) self.recording = 0 self.data = [] def handle_starttag (स्वयं, टैग, गुण): अगर टैग! = 'Div': return self.recording: Self.recording + = 1 नाम के लिए वापसी, गुणों में मान: यदि नाम == 'आईडी' और मान == 'रिमॉजिटरी': तोड़ो दूसरा: रिटर्न स्व.रेकॉर्डिंग = 1 डेफ हैंडलएंडटैग (सेल्फ, टैग): if टैग == 'Div' और self.recording: self.recording - = 1 def handle_data (स्वयं, डेटा): अगर self.recording: self.data.append (डेटा)
स्व .recording नेस्टेड div टैग की संख्या को "ट्रिगरिंग" से शुरू करते हैं। जब हम एक ट्रिगरिंग टैग में निहित उप-पेड़ में होते हैं, तो हम self.data में डेटा जमा करते हैं। पार्स के अंत में डेटा < Code> self.data (स्ट्रिंग्स की एक सूची, संभावित रूप से खाली नहीं अगर कोई ट्रिगरिंग टैग नहीं मिला था) क्लास के बाहर से आपका कोड सीधे पार्स के अंत में उदाहरण से सूची तक पहुंच सकता है, या आप इस उद्देश्य के लिए उपयुक्त एक्सेसर विधियों को जोड़ सकते हैं, इसके आधार पर कि आपका लक्ष्य वास्तव में क्या है।
'div' , 'id' , और ऊपर दिए गए कोड में दिखाई देने वाली लगातार शाब्दिक स्ट्रिंग के बजाय, आसानी से थोड़ा और सामान्य बना दिया जा सकता है, रिजॉजिटरी ', उदाहरण के गुण self.tag , self.attname और self.attvalue , __ init __ द्वारा सेट कोड> तर्कों से इसे पारित किया - मैं ऊपर दिए गए कोड में सस्ते सामान्यीकरण कदम से बचने के लिए मुख्य बिंदुओं को अस्पष्ट करने से बचने के लिए (नेस्टेड टैगों की गिनती का ट्रैक रखें और रिकॉर्डिंग राज्य सक्रिय होने पर डेटा जमा करें)।
Comments
Post a Comment