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
- 5169 reads







Recent comments