Wednesday 15 September 2010

urllib2 - Python: Get data between html tags if an attribute matches and put it into a list -


यह एक html फ़ाइल का हिस्सा है।

  ...... .. .... & lt; tr & gt; & Lt; td रंग = "सफ़ेद" शैली = "रंग: काला; बीजी रंगोर =" # एफएफएफएफ़्फ़्फ़ "" एडम "और <; वें & gt; टीडी रंग =" सफेद "शैली =" रंग: सफेद; bgcolor = "# FF9900" & gt; 450,231 & lt; / वें & gt; & Lt; td रंग = "सफेद" शैली = "रंग: काला; बीजी रंगोर =" # सीसी0000 "& gt; 658902 & lt; / th & gt; & lt; / tr & gt; ....... ....... & lt; tr & gt ; & Lt; td रंग = "सफेद" शैली = "रंग: काला; bgcolor = "# ffff00" & gt; जॉन & lt; / वें & gt; & Lt; td रंग = "सफेद" शैली = "रंग: सफेद; बीजी रंग =" # एफएफ 9900 "& gt; 8734658 & lt; / th & gt; & lt; टीडी रंग =" सफेद "शैली =" रंग: काला; bgcolor = "# cc0000" & gt; 90,865 & lt; / वें & gt; & Lt; / टीआर & gt; ....... .......   

अगर bgcolor = "# ff9900" , मुझे 450231 और 8734658 निकालने और उन्हें डाल करने की आवश्यकता है

  वर्ग MyHTMLParser (HTMLParser): def __init __ (स्वयं): HTMLParser .__ init __ (स्वयं) स्वयं। Recording = 0 self.data = [] def handle_starttag (स्वयं, टैग, attrs): यदि टैग == 'td': नाम के लिए, attrs में मान: if name == 'bgcolor' और value == '# 993399': Self.recording = 1 def handle_endtag (self, tag): if टैग == 'th': self.recording - = 1 def handle_data (स्वयं, डेटा): यदि self.recording: self.data.append (डेटा)। । । Y = urllib2.urlopen (x) # x हो जाता है html फ़ाइल html = y.read () parser = MyHTMLParser () parser.feed (html) प्रिंट parser.data parser.close ()   < P> parser.data में  ['\ n', 'एडम', '\ n', '450231', '\ n', '658902 \ n', '\ n', '\ n', ' \ N '....]  जब इसमें केवल  [' 450231 ',' 8734658 ']  होना चाहिए, मुझे यकीन नहीं है कि मैं गलत कहां हूं।  < / Div> 

आपका रिकॉर्डिंग ध्वज हमेशा चालू होता है, इसके बावजूद जब आरंभ किया गया था जब भी उचित हो, आपको इसे शून्य पर रीसेट करने की आवश्यकता हो सकती है चूंकि ध्वज को सभी टैग्स के लिए सेट किया गया है, इसलिए आपको हमेशा सूची में जोड़े जाने वाला डेटा प्राप्त होगा। यह आपके 'व' टैग के मुख्य कारण है जो HTML में मौजूद नहीं है पहले HTML को ठीक करें।

संपादित करें: बस पढ़ें कि HTML आपके नियंत्रण में नहीं है। मुझे यकीन नहीं है कि 'वें' अंत टैग में चेक सफल होगा। एंडटैग में टैग को प्रिंट करने का प्रयास करें यदि यह वें नहीं है, तो नियंत्रण कभी भी वहां नहीं पहुंचेंगे। इसका मिलान करने के लिए नियमित अभिव्यक्तियों का उपयोग करने के बारे में कैसे? यदि सुंदर सूप इसे पार्स नहीं कर पाता है, तो आपको फिर से रेगेक्स का सहारा लेना पड़ सकता है।

  pattern = '& lt; td। *? Bgcolor = "# ff9900"। *? & Gt; (। *?) & lt; / वें & gt; ' Re.findall (पैटर्न, html)   

आपको परिणाम देना चाहिए।

No comments:

Post a Comment