【发布时间】:2012-03-16 08:37:49
【问题描述】:
我是相对较新的 python 我正在尝试将 html.parser 作为休闲:
from html.parser import HTMLParser
import urllib.request
class TestParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Start Tag: ", tag, attrs)
def handle_endtag(self, tag):
print("End Tag: ", tag)
def handle_data(self, data):
print("Data: ", data)
def handle_startendtag(self,tag,attrs):
print("StarEnd Tag: ", tag, attrs)
class DanParser(HTMLParser):
def __init__(self):
super(DanParser, self).__init__(strict = False)
self.in_select = False
def handle_starttag(self, tag, attrs):
print("Start Tag: ", tag, attrs)
if tag == "select":
self.in_select = True
print("Start Tag: ", tag, attrs)
def handle_endtag(self, tag):
print("EndTag: ", tag)
if tag == "select" and self.in_select:
self.in_select = False
print("EndTag: ", tag)
def handle_data(self, data):
print("Data: ", data)
if self.in_select:
print("Data: ", data)
def handle_startendtag(self,tag,attrs):
print("StarEnd Tag: ", tag, attrs)
当我在解释器中做时
t = new DanParser()
t.feed("<select>test</select>")
我得到:
Data: <select>
Data: test
EndTag: select
handle_starttag 方法未被调用,但是当我使用 TestParser 执行此操作时,它的行为正确。 谁能告诉我我做错了什么!!! 谢谢
【问题讨论】:
-
string=False是什么意思?根据文档 HTMLParser 不接受参数。t = new DanParser()也是语法错误,您的缩进不正确。修复这些和你的例子对我有用。 -
顺便说一句,如果这是真正的代码而不只是练习,您应该考虑使用 lxml python lib 进行 html 解析.. 并请求库而不是 urllib
-
@aquavitae:
HTMLParser()hasstrictargument Python3.2 起 -
我只是检查了你的链接,它的工作很有趣,但我可以确保它不能在我的电脑上工作。这可能是我的解释器或源代码文件文本编码的问题
标签: python html-parsing python-3.2