Im относительный новый питон им пробуя html.parser, как лань:питона 3,2 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()' является синтаксической ошибкой, а ваш отступ неверен. Исправление этих и ваших примеров работает для меня. – aquavitae
BTW, если это реальный код, а не просто практика, вы должны рассмотреть возможность использования lxml python lib для разбора html .. и запрашивает библиотеку вместо urllib. – alonisser
@aquavitae: ['HTMLParser()' имеет 'strict' аргумент] (http://docs.python.org/dev/library/html.parser.html?highlight=htmlparser#html.parser.HTMLParser) с Python3.2 – jfs