sgmllib
Submitted by wd on Sat, 2008-02-09 17:21
ตัวอย่างโค๊ดไพธอน ในการใช้งานมอดูล sgmllib
เอามาใช้ในการจัดลำดับน้ำหนักให้กับเนื้อความใน HTML
โดยจะวิเคราะห์น้ำหนักจากแท็ก
(จุดประสงค์ที่แท้จริง คือจะเอาน้ำหนักนี้มาจัดลำดับความสำคัญในการค้นหาข้อมูล) เขียนโดยเอาตัวอย่างจาก
ตัวอย่างการใช้งานคือ
โดยจะวิเคราะห์น้ำหนักจากแท็ก
(จุดประสงค์ที่แท้จริง คือจะเอาน้ำหนักนี้มาจัดลำดับความสำคัญในการค้นหาข้อมูล) เขียนโดยเอาตัวอย่างจาก
- ฟังก์ชั่น test ในมอดูล sgmllib เอง
สำหรับเดเบียน ดูเนื้อไฟล์ที่/usr/lib/python2.X/sgmllib.py
หรือดูได้ที่ หน้าไพธอน - หนังสือ Dive into Python เรื่อง 8.3. Extracting data from HTML documents
self.data_line
ไปใช้ตัวอย่างการใช้งานคือ
- กรณีข้อความธรรมดา
-
>>> import util >>> data_list = util.HTML_weight_parse('This is the example of sgmllib.') >>> data_list.data_line [['This is the example of sgmllib.', 1]]
- กรณีเป็นไฟล์ HTML
- สมมุติว่าเนื้อไฟล์ test.html คือ
abc this is x.html testlink
การใช้งานจะเป็นดังนี้>>> import util >>> f = open('test.html') >>> data_list = util.HTML_weight_parse(f.read()) >>> data_list.data_line [['abc', 11], ['this is x.html', 1], ['abc.com', 11], ['testlink', 11]]
#!/usr/bin/env python import sgmllib class HTML_weight_parse(sgmllib.SGMLParser): """Determine weight of text in HTML. input: text or html output = self.data_line : [[line1, weight1], ...] tag omitted data: script, style tag included attribute: meta name="keywords" content="..." img src="..." title="..." alt="..." a href="..." """ weight_dict = { 'title':10, 'h1':10, 'h2':8, 'h3':7, 'h4':6, 'h5':5, 'h6':4 } def __init__(self, text): self.data = '' self.weight = 1 self.data_line = [] sgmllib.SGMLParser.__init__(self) for line in text.split('\n'): self.feed(line.strip()) self.close() def handle_data(self, data): self.data += data def handle_comment(self, data): #bypass comment pass def start_script(self, data): #bypass pass def unknown_starttag(self, tag, attrs): self.flush() if attrs: #tag with attributes meta_enable = False for name, value in attrs: if tag == "a": if name == "href": self.data += value self.flush(False) elif tag == "meta": if name == "name" and value == "keyword": meta_enable = True self.weight += 2 if name == "content" and meta_enable: self.data += value self.flush(False) meta_enable = False elif tag == "img" and name in ["title", "alt"]: self.data += value self.flush(False) else: self.flush() #tag with & without attribute if tag in self.weight_dict.keys(): self.weight += self.weight_dict[tag] else: self.flush() def unknown_endtag(self, tag): self.flush() def close(self): sgmllib.SGMLParser.close(self) self.flush()
- Printer-friendly version
- Log in or register to post comments
- 4928 reads
Recent comments