Nesta lição, é isso que pretendemos fazer. Vamos descobrir como os valores de diferentes tags HTML podem ser extraídos e também sobrescrever a funcionalidade padrão deste módulo para adicionar alguma lógica própria. Faremos isso usando o HTMLParser classe em Python em html.analisador módulo. Vamos ver o código em ação.
Olhando para a classe HTMLParser
Para analisar o texto HTML em Python, podemos usar HTMLParser classe em html.analisador módulo. Vejamos a definição de classe para o HTMLParser aula:
classe html.analisador.HTMLParser (*, convert_charrefs = True)O convert_charrefs campo, se definido como True fará com que todas as referências de caracteres sejam convertidas em seus equivalentes Unicode. Apenas o script / estilo elementos não são convertidos. Agora, tentaremos entender cada função para esta classe também para entender melhor o que cada função faz.
- handle_startendtag Esta é a primeira função que é acionada quando a string HTML é passada para a instância da classe. Assim que o texto chega aqui, o controle é passado para outras funções na classe, que se restringe a outras marcas na String. Isso também está claro na definição desta função: def handle_startendtag (self, tag, attrs):
auto.handle_starttag (tag, attrs)
auto.handle_endtag (tag) - handle_starttag: Este método gerencia a tag inicial para os dados que recebe. Sua definição é a seguinte: def handle_starttag (self, tag, attrs):
passar - handle_endtag: Este método gerencia a tag final para os dados que recebe: def handle_endtag (self, tag):
passar - handle_charref: Este método gerencia as referências de caracteres nos dados que recebe. Sua definição é a seguinte: def handle_charref (self, name):
passar - handle_entityref: Esta função lida com as referências de entidade no HTML passado a ela: def handle_entityref (self, name):
passar - handle_data: Esta é a função onde o trabalho real é feito para extrair valores das tags HTML e é passado os dados relacionados a cada tag. Sua definição é a seguinte: def handle_data (self, data):
passar - handle_comment: Usando esta função, também podemos obter comentários anexados a uma fonte HTML: def handle_comment (self, data):
passar - handle_pi: Como o HTML também pode ter instruções de processamento, esta é a função onde estes. Sua definição é conforme mostrado abaixo: def handle_pi (self, data):
passar - handle_decl: Este método lida com as declarações no HTML, sua definição é fornecida como: def handle_decl (self, decl):
passar
Subclassificação da classe HTMLParser
Nesta seção, iremos criar uma subclasse da classe HTMLParser e dar uma olhada em algumas das funções que estão sendo chamadas quando os dados HTML são passados para a instância da classe. Vamos escrever um script simples que faça tudo isso:
de html.parser import HTMLParserclasse LinuxHTMLParser (HTMLParser):
def handle_starttag (self, tag, attrs):
print ("Tag de início encontrada:", tag)
def handle_endtag (self, tag):
print ("Tag final encontrada:", tag)
def handle_data (self, data):
imprimir ("Dados encontrados:", dados)
parser = LinuxHTMLParser ()
analisador.alimentação("
'
Módulo de análise de HTML Python
')
Aqui está o que recebemos de volta com este comando:
Subclasse Python HTMLParser
Funções HTMLParser
Nesta seção, trabalharemos com várias funções da classe HTMLParser e examinaremos a funcionalidade de cada uma delas:
de html.parser import HTMLParserde html.entidades importar nome2 ponto de código
classe LinuxHint_Parse (HTMLParser):
def handle_starttag (self, tag, attrs):
imprimir ("tag inicial:", tag)
para attr em attrs:
print ("attr:", attr)
def handle_endtag (self, tag):
imprimir ("Tag final:", tag)
def handle_data (self, data):
imprimir ("Dados:", dados)
def handle_comment (self, data):
imprimir ("Comentário:", dados)
def handle_entityref (self, name):
c = chr (name2codepoint [nome])
print ("Nomeado ent:", c)
def handle_charref (self, name):
se nome.começa com ('x'):
c = chr (int (nome [1:], 16))
senão:
c = chr (int (nome))
imprimir ("Num ent:", c)
def handle_decl (self, data):
imprimir ("Decl:", dados)
parser = LinuxHint_Parse ()
Com várias chamadas, vamos alimentar dados HTML separados para esta instância e ver qual saída essas chamadas geram. Começaremos com um simples DOCTYPE fragmento:
analisador.alimentação(' ')Aqui está o que recebemos de volta com esta ligação:
String DOCTYPE
Vamos agora tentar uma tag de imagem e ver quais dados ela extrai:
analisador.alimentação('')Aqui está o que recebemos de volta com esta ligação:
Tag de imagem HTMLParser
A seguir, vamos tentar como a tag de script se comporta com funções Python:
analisador.alimentação('')analisador.alimentação('')
analisador.feed ('# python color: green')
Aqui está o que recebemos de volta com esta ligação:
Tag de script em htmlparser
Por fim, também passamos comentários para a seção HTMLParser:
analisador.alimentação('''')
Aqui está o que recebemos de volta com esta ligação:
Analisando comentários
Conclusão
Nesta lição, vimos como podemos analisar HTML usando a própria classe HTMLParser do Python sem qualquer outra biblioteca. Podemos facilmente modificar o código para alterar a fonte dos dados HTML para um cliente HTTP.
Leia mais postagens baseadas em Python aqui.