Usando python para trabalhar com páginas html na ciência de dados

páginas HTML podem conter informações importantes para os cientistas de dados. Python é uma boa ferramenta para recuperar essa informação. páginas HTML contêm dados em um formato hierárquico. Muitas vezes você encontrar o conteúdo HTML em um formulário HTML estrita ou como XML.

O formulário HTML pode apresentar problemas, pois nem sempre necessariamente seguem as regras de formatação estritas. XML faz seguir as regras de formatação estritas por causa dos padrões utilizados para defini-lo, o que torna mais fácil de analisar. No entanto, em ambos os casos, você usa técnicas semelhantes para analisar uma página. A primeira secção que se segue descreve como analisar páginas HTML em geral.

Às vezes você não precisa de todos os dados em uma página. Em vez disso você precisa de dados específicos, que é onde XPath entra em jogo. Você pode usar XPath para localizar dados específicos na página HTML e extraí-lo para suas necessidades particulares.

Análise de XML e HTML

Simplesmente extrair dados de um arquivo XML pode não ser suficiente. Os dados podem não estar no formato correto. Usando essa abordagem, você acaba com um Quadro de dados contendo três colunas de tipo str. Obviamente, você não pode executar tanto a manipulação de dados com cordas. O exemplo a seguir molda os dados XML para criar uma nova trama de dados contendo apenas o e elementos no formato correto.

de lxml pandas importação objectifyimport como distutils pdfrom importar utilxml = objectify.parse (aberto ( `XMLData.xml`)) = raiz xml.getroot () df = pd.DataFrame (colunas = ( `N`, `booleano`)) para i no intervalo (0,4): obj = root.getchildren () [i] .getchildren () = linha Dict (ZIP ([ `N`, `booleano`], [obj [0] .pyval, booleano (util .strtobool (obj [2] .text))])) row_s = pd.Series (linha) row_s.name = obj [1] = .textdf df.append (row_s) do tipo de impressão (df.ix [ `Primeira`] [ `Number`]) tipo de impressão (df.ix [ `First`] [ `booleano`])

A obtenção de um valor numérico do elemento consiste em utilizar o pyval de saída, em vez da texto saída. O resultado não é uma int, mas é numérico.

Video: Python - Estrutura de Dados Fila

A conversão do elemento é um pouco mais difícil. Você deve converter a string para um valor numérico usando o strtobool () função em distutils.util. A saída é uma 0 para Falso valores e uma 1 para Verdade valores. No entanto, isso ainda não é um valor booleano. Para criar um valor booleano, você deve converter a 0 ou 1 usando booleano ().

Este exemplo também mostra como acessar valores individuais no Quadro de dados. Observe que o nome propriedade agora usa o valor do elemento para facilitar o acesso. Você fornece um valor de índice usando ix e, em seguida, aceder a funcionalidade individual utilizando um segundo índice. A saída deste exemplo é



Usando o XPath para a extracção de dados

Usando XPath para extrair dados de seu conjunto de dados pode reduzir significativamente a complexidade do código e, potencialmente, torná-lo mais rápido também. O exemplo a seguir mostra uma versão XPath do exemplo acima. Observe que esta versão é menor e não requer o uso de um para ciclo.

de lxml pandas importação objectifyimport como distutils pdfrom importar utilxml = objectify.parse (aberto ( `XMLData.xml`)) = raiz xml.getroot () = dados do fecho de correr (mapa (int, root.xpath ( `ficha / Número`)) , mapa (booleano, o mapa (util.strtobool, mapa (str, root.xpath ( `ficha / booleana`))))) df = pd.DataFrame (dados, colunas = ( `N`, `booleano`), índice = map (str, root.xpath ( `Record / string`))) tipo dfprint impressão (df.ix [ `First`] [ `Number`]) tipo de impressão (df.ix [ `First`] [ `booleano` ])

O exemplo começa exatamente como o exemplo anterior, com a importação de dados ea obtenção do nó raiz. Neste ponto, o exemplo cria um objecto de dados que contém o número de registo e de valor booleano pares. Porque as entradas do arquivo XML são todas as cordas, você deve usar o mapa() função para converter as cordas para os valores apropriados.

Trabalhando com o número de registro é simples - tudo que você faz é mapeá-lo para um int. o XPath () função aceita um caminho a partir do nó de raiz para os dados que você precisa, o que é Número recorde nesse caso.

Mapeamento do valor booleano é um pouco mais difícil. Você deve usar o util.strtobool () funcionar para converter os valores booleanos de cadeia para um número que booleano () pode converter a um equivalente booleana. No entanto, se você tentar executar apenas um mapeamento duplo, você vai encontrar uma mensagem de erro dizendo que as listas não incluem uma função requerida, abaixar().Para superar esse obstáculo, você executar um mapeamento triplo e converter os dados em uma string usando o str () funcionar pela primeira vez.

criando o Quadro de dados é diferente, também. Em vez de adicionar linhas individuais, você adicionar todas as linhas de uma só vez usando dados. Configurando os nomes das colunas é o mesmo que antes. No entanto, agora você precisa de alguma forma de adicionar os nomes de linha, como no exemplo anterior. Esta tarefa é realizada, definindo o índice parâmetro para uma versão mapeada do XPath () saída para o Gravar / String caminho. Aqui está a saída que você pode esperar:

 Número BooleanFirst 1 TrueSecond 2 FalseThird 3 TrueFourth 4 Falso

Publicações relacionadas