Analisando HTML usando Python

Analisando HTML usando Python
A análise do HTML é uma das tarefas mais comuns realizadas hoje para coletar informações dos sites e miner -las para vários fins, como estabelecer o desempenho de um produto ao longo do tempo, resenhas de um livro em um site e muito mais. Existem muitas bibliotecas como o BeautifulSoup em Python, que abstrairá tantos pontos dolorosos na análise de HTML, mas vale a pena saber como essas bibliotecas realmente funcionam sob essa camada de abstração.

Nesta lição, é isso que pretendemos fazer. Descobriremos como os valores de diferentes tags HTML podem ser extraídos e também substituir a funcionalidade padrão deste módulo para adicionar alguma lógica de nossa 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 dfinição da classe para o Htmlparser aula:

Classe html.analisador.Htmlparser (*, convert_charrefs = true)

O convert_charrefs O campo, se definido como True, fará todas as referências de personagem convertidas aos seus equivalentes unicode. Apenas o script/estilo Os 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. Quando o texto chega aqui, o controle é passado para outras funções da classe que se estreita para outras tags na string. Isso também é claro na definição para esta 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 de início dos dados que recebe. Sua definição é como mostrado abaixo:
    def handle_startTag (self, tag, attrs):
    passar
  • handle_endtag: Este método gerencia a etiqueta 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 é como mostrado abaixo:
    def handle_charref (self, nome):
    passar
  • handle_entityRef: Esta função lida com as referências de entidade no HTML passada a ela:
    def handle_entityref (self, nome):
    passar
  • handle_data: Esta é a função em que o trabalho real é feito para extrair valores das tags html e é passado os dados relacionados a cada tag. Sua definição é como mostrado abaixo:
    def handle_data (self, dados):
    passar
  • handle_comment: Usando esta função, também podemos receber comentários a uma fonte HTML:
    def handle_comment (self, dados):
    passar
  • handle_pi: Como o HTML também pode ter instruções de processamento, esta é a função em que sua definição é como mostrado abaixo:
    def handle_pi (self, dados):
    passar
  • handle_decl: Este método lida com as declarações no HTML, sua definição é fornecida como:
    def handle_decl (self, decl):
    passar

Subclassificando a classe HTMLPARSER

Nesta seção, subclasseremos a classe HTMLPARSER e daremos uma olhada em algumas das funções que estão sendo chamadas quando os dados HTML forem passados ​​para a instância da classe. Vamos escrever um script simples que faça tudo isso:

de html.Resumo Importar HtmlParser
Classe LinuxhtmlParser (htmlParser):
def handle_startTag (self, tag, attrs):
print ("Iniciar a tag encontrada:", tag)
def Handle_endTag (self, tag):
print ("Tag final encontrado:", tag)
def handle_data (self, dados):
print ("Dados encontrados:", dados)
Parser = LinuxhtmlParser ()
analisador.alimentar("
'

Módulo de análise HTML Python


')

Aqui está o que recebemos 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.Resumo Importar HtmlParser
de html.entidades importa name2CodePoint
classe Linuxhint_parse (htmlparser):
def handle_startTag (self, tag, attrs):
print ("Start Tag:", Tag)
para attr em attrs:
print ("att:", att)
def Handle_endTag (self, tag):
print ("tag final:", tag)
def handle_data (self, dados):
print ("dados:", dados)
def handle_comment (self, dados):
print ("Comentário:", dados)
def handle_entityref (self, nome):
C = Chr (name2CodePoint [Nome])
print ("chamado ent:", c)
def handle_charref (self, nome):
se nome.StartSwith ('x'):
C = Chr (int (nome [1:], 16)))
outro:
C = Chr (int (nome))
print ("num ent:", c)
def handle_decl (self, dados):
Print ("Decl:", Data)
Parser = Linuxhint_parse ()

Com várias chamadas, vamos alimentar dados HTML separados para esta instância e ver quais saídas essas chamadas geram. Vamos começar com um simples Doctype corda:

analisador.alimentar('"" http: // www.W3.org/tr/html4/strito.dtd "> ')

Aqui está o que recebemos com esta chamada:

String doctype

Vamos agora experimentar uma tag de imagem e ver quais dados ela extrai:

analisador.alimentar('')

Aqui está o que recebemos com esta chamada:

Tag de imagem htmlparser

Em seguida, vamos tentar como a tag de script se comporta com as funções Python:

analisador.alimentar(''
'alerta("Linuxhint Python"); ')
analisador.feed ('#python cor: verde')
analisador.feed ('#python cor: verde')

Aqui está o que recebemos com esta chamada:

Tag de script em htmlparser

Finalmente, passamos comentários para a seção HTMLParser:

analisador.alimentar(''
'Conteúdo específico de ou seja')

Aqui está o que recebemos com esta chamada:

Analisando comentários

Conclusão

Nesta lição, analisamos como podemos analisar o HTML usando a classe HTMLPARSER PRYMLPERS sem qualquer outra biblioteca. Podemos modificar facilmente o código para alterar a fonte dos dados HTML para um cliente HTTP.

Leia mais postagens baseadas em Python aqui.