我正在使用HTMLParser解析html文档,我想在p标签的开头和结尾之间打印内容
请参阅我的代码段
def handle_starttag(self, tag, attrs):
if tag == 'p':
print "TODO: print the contents"
答案 0 :(得分:6)
基于@tauran发布的内容,您可能希望执行以下操作:
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def print_p_contents(self, html):
self.tag_stack = []
self.feed(html)
def handle_starttag(self, tag, attrs):
self.tag_stack.append(tag.lower())
def handle_endtag(self, tag):
self.tag_stack.pop()
def handle_data(self, data):
if self.tag_stack[-1] == 'p':
print data
p = MyHTMLParser()
p.print_p_contents('<p>test</p>')
现在,您可能希望将所有<p>
内容推送到列表中,然后将其作为结果或其他类似内容返回。
TIL:在使用像这样的库时,你需要考虑堆栈!
答案 1 :(得分:4)
我从docs:
扩展了示例from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print "Encountered the beginning of a %s tag" % tag
def handle_endtag(self, tag):
print "Encountered the end of a %s tag" % tag
def handle_data(self, data):
print "Encountered data %s" % data
p = MyHTMLParser()
p.feed('<p>test</p>')
-
Encountered the beginning of a p tag
Encountered data test
Encountered the end of a p tag
答案 2 :(得分:1)
它似乎不适用于我的代码所以我将from html.parser import HTMLParser
tag_stack = []
class MONanalyseur(HTMLParser):
def handle_starttag(self, tag, attrs):
tag_stack.append(tag.lower())
def handle_endtag(self, tag):
tag_stack.pop()
def handle_data(self, data):
if tag_stack[-1] == 'head':
print(data)
parser=MONanalyseur()
parser.feed()
定义为外部类似于一种全局变量。
SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}