这是我的代码段:
from HTMLParser import HTMLParser
# create a subclass and override the handler methods
class MyHTMLParser(HTMLParser):
def handle_endtag(self, tag):
if(tag == 'tr'):
textFile.write('\n')
def handle_data(self, data):
textFile.write(data+"\t")
textFile = open('instaQueryResult', 'w+')
# instantiate the parser and fed it some HTML
parser = MyHTMLParser()
fh = open('/data/aman/aggregate.html','r')
l = fh.readlines()
for line in l:
parser.feed(line)
我解析HTML文件并获得以下预期输出: -
plantype count(distinct(SubscriberId)) sum(DownBytesNONE) sum(UpBytesNONE) sum(SessionCountNONE)
1006657 341175 36435436130 36472526498 694016
1013287 342280 36694005846 36533489363 697098
1006613 343867 36763692173 36755893252 699976
1014883 342436 36575951812 36572503611 695683
1003022 343238 36705838418 36637429353 698618
plantype count(distinct(SubscriberId)) sum(DownBytesNONE) sum(UpBytesNONE) sum(SessionCountNONE)
1013287 342280 36694005846 36533489363 697098
1006657 341175 36435436130 36472526498 694016
1006613 343867 36763692173 36755893252 699976
1014883 342436 36575951812 36572503611 695683
1003022 343238 36705838418 36637429353 698618
此输出正确但我希望删除标题。我的第一行包含要从文件中删除的标题,只留下值。
预期产出:
1006657 341175 36435436130 36472526498 694016
1013287 342280 36694005846 36533489363 697098
1006613 343867 36763692173 36755893252 699976
1014883 342436 36575951812 36572503611 695683
1003022 343238 36705838418 36637429353 698618
1013287 342280 36694005846 36533489363 697098
1006657 341175 36435436130 36472526498 694016
1006613 343867 36763692173 36755893252 699976
1014883 342436 36575951812 36572503611 695683
1003022 343238 36705838418 36637429353 698618
有任何帮助吗? 感谢
答案 0 :(得分:1)
由于您试图摆脱任何没有数字的内容,您可以尝试将handle_data(self, data)
方法修改为:
def handle_data(self, data):
if data.isdigit():
textFile.write(data+"\t")
答案 1 :(得分:0)
我认为你的html数据有以下形式:
<table>
<tr>
<td>plantype</td>
<td>count(distinct(SubscriberId))</td>
...
</tr>
<tr>
<td>1006657</td>
<td>341175</td>
...
</tr>
</table>
您可以使用row_count
变量来检查您是否在第一个tr-tag中。
使用row_count
将handle_starttag
设置为0。在handle_endtag
中检查(并递增):
class MyHTMLParser(HTMLParser):
row_count = 0
def handle_starttag(self, tag, attrs):
if (tag == 'table'):
self.row_count = 0
def handle_endtag(self, tag):
if (tag == 'tr') and (self.row_count > 0):
textFile.write('\n')
self.row_count += 1
def handle_data(self, tag):
if self.row_count > 0:
textFile.write(data+"\t")
答案 2 :(得分:0)
试试这个:
fh = open('/data/aman/aggregate.html','r')
l = fh.readlines()
for line in l:
if 'plantype' not in line:
parser.feed(line)
您正逐行阅读文件。当你将字符串的“if”部分放入“不在线”时,它会为其他行(你想要的那些行)执行下一个块。