Есть документ HTML. В основном он состоит из таблиц. Задача состоит в том, чтобы отпарсить его и убрать все лишние теги кроме заданных table, caption, th, tr и td. Также необходимо убрать все атрибуты типа ширина толцина шрифт и пр. Затем работа с базой - во время анализа сознается таблица с именем между <caption>Имя_таблицы</caption> и полями между <th>Имена_полей</th>, и заполняется данными соответственно между тегами <td>Данные</td>
Вот что получилось у меня:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys, pg
from HTMLParser import HTMLParser
inFile=file("/other/shels/status.html", 'r')
outFile=file("/other/shels/parsestatus.html", 'w')
class MyHTMLParser(HTMLParser):
def __init__(self):
self.parseTag=False
HTMLParser.reset(self)
def connection(self, query):
db=pg.connect("dbname='my_base' user='homeuser'")
query=db.query(query)
return query
def handle_starttag(self, tag, attrs):
if (tag == "table"):
self.parseStartTag='<'+tag+'>'
outFile.write(self.parseStartTag)
self.parseTag=True
if (tag == "caption"):
self.parseStartTag='<'+tag+'>'
outFile.write(self.parseStartTag)
self.parseTag=True
if (tag == "th"):
self.parseStartTag='<'+tag+'>'
outFile.write(self.parseStartTag)
self.parseTag=True
if (tag == "tr"):
self.parseStartTag='<'+tag+'>'
outFile.write(self.parseStartTag)
self.parseTag=True
if (tag == "td"):
self.parseStartTag='<'+tag+'>'
outFile.write(self.parseStartTag)
self.parseTag=True
def handle_endtag(self, tag):
if (tag == "table"):
self.parseEndTag='</'+tag+'>'
outFile.write(self.parseEndTag)
if (tag == "caption"):
self.parseEndTag='</'+tag+'>'
outFile.write(self.parseEndTag)
if (tag == "th"):
self.parseEndTag='</'+tag+'>'
outFile.write(self.parseEndTag)
if (tag == "tr"):
self.parseEndTag='</'+tag+'>'
outFile.write(self.parseEndTag)
if (tag == "td"):
self.parseEndTag='</'+tag+'>'
outFile.write(self.parseEndTag)
def handle_data(self, data):
if self.parseTag:
#outFile.write(data)
createQuery='CREATE TABLE %s()' %data
self.connection(createQuery)
if __name__ == '__main__':
parse = MyHTMLParser()
for line in inFile:
parse.feed(line)