Os dados estão literalmente em todo lugar, em todos os tipos de documentos. Mas nem tudo é útil, daí a necessidade de analisá -lo para obter as peças necessárias. Os documentos XML são um desses documentos que mantêm dados. Eles são muito semelhantes aos arquivos HTML, pois têm quase o mesmo tipo de estrutura. Portanto, você precisará analisá -los para obter informações vitais, assim como faria ao trabalhar com HTML.Existem dois aspectos principais para analisar arquivos XML. Eles são:
Você precisará encontrar a tag que contém as informações desejadas e extrair essas informações. Você aprenderá a fazer ambos ao trabalhar com arquivos XML antes do final deste artigo.
BeautifulSoup é uma das bibliotecas mais usadas quando se trata de raspar a web com Python. Como os arquivos XML são semelhantes aos arquivos HTML, também é capaz de analisá -los. Para analisar os arquivos XML usando o BeautifulSoup, é melhor que você use o Python's lxml analisador.
Você pode instalar as duas bibliotecas usando o pip Ferramenta de instalação, através do comando abaixo:
pip install bs4 lxmlPara confirmar que ambas as bibliotecas estão instaladas com sucesso, você pode ativar o shell interativo e tentar importar ambos. Se nenhum erro surgir, você estará pronto para ir com o resto do artigo.
Aqui está um exemplo:
$ pythonAntes de seguir em frente, você deve criar um arquivo XML a partir do trecho de código abaixo. É bastante simples e deve se adequar aos casos de uso que você aprenderá no restante do artigo. Basta copiar, cole em seu editor e salve; um nome como amostra.xml deve ser suficiente.
Agora, em seu script python; Você precisar. O restante deste artigo fará uso do BS_CONTENT variável, então é importante que você dê este passo.
# Importar beautifulsoupA amostra de código acima das importações Belo grupo, Em seguida, ele lê o arquivo XML como um arquivo regular. Depois disso, passa o conteúdo para o importado Belo grupo biblioteca, bem como o analisador de escolha.
Você notará que o código não importa lxml. Não precisa como Belo grupo vai escolher o lxml analisador como resultado da passagem "LXML" no objeto.
Agora, você pode prosseguir com o restante do artigo.
Encontrando tags
Um dos estágios mais importantes da análise de arquivos XML está procurando tags. Existem várias maneiras de fazer isso ao usar o BeautifulSoup; Então você precisa saber sobre alguns deles para ter as melhores ferramentas para a situação apropriada.
Você pode encontrar tags em documentos XML por:
Encontrar tags por nomes
Existem dois métodos de belo grupo que você pode usar ao encontrar tags por nomes. No entanto, os casos de uso diferem; Vamos dar uma olhada neles.
Da experiência pessoal, você usará o encontrar método com mais frequência do que os outros métodos para encontrar tags neste artigo. A tag de localização recebe o nome da tag que você deseja obter e retorna um objeto de belo grupo da tag se encontrar uma; caso contrário, ele retorna Nenhum.
Aqui está um exemplo:
>>> resultado = bs_content.encontre ("dados")Se você der uma olhada no exemplo, verá que o encontrar O método retorna uma tag se corresponder ao nome, caso contrário, retorna nenhum. No entanto, se você analisar mais de perto, você verá apenas uma única tag.
Por exemplo, quando encontre ("dados") foi chamado, ele só retornou a primeira etiqueta de dados, mas não retornou os outros.
PEGUEI VOCÊS: O encontrar O método retornará apenas a primeira tag que corresponde à sua consulta.
Então, como você consegue encontrar outras tags também? Isso nos leva ao próximo método.
encontrar tudo
O encontrar tudo o método é bastante semelhante ao encontrar método. A única diferença é que ele retorna uma lista de tags que correspondem à sua consulta. Quando não encontra nenhuma tag, simplesmente retorna uma lista vazia. Por isso, encontrar tudo sempre retornará uma lista.
Aqui está um exemplo:
>>> resultado = bs_content.find_all ("dados")Agora que você sabe como usar o encontrar e encontrar tudo Métodos, você pode procurar tags em qualquer lugar do documento XML. No entanto, você pode tornar suas pesquisas mais poderosas.
Aqui está como:
Algumas tags podem ter o mesmo nome, mas atributos diferentes. Por exemplo, o criança Tags têm um nome atributo e valores diferentes. Você pode fazer pesquisas específicas com base nessas.
Veja isso:
>>> resultado = bs_content.encontre ("filho", "name": "rose")Você verá que há algo diferente sobre o uso do encontrar e encontrar tudo Métodos aqui: ambos têm um segundo parâmetro.
Quando você passa em um dicionário como um segundo parâmetro, o encontrar e encontrar tudo Métodos ainda mais sua pesquisa para obter tags que possuem atributos e valores que se encaixam na chave fornecida: par de valores.
Por exemplo, apesar de usar o encontrar método no primeiro exemplo, ele retornou o segundo criança tag (em vez do primeiro criança tag), porque essa é a primeira tag que corresponde à consulta. O encontrar tudo tag segue o mesmo princípio, exceto que retorna todas as tags que correspondem à consulta, não apenas a primeira.
Encontrar tags por relacionamentos
Embora menos popular do que pesquisar por nomes de tags, você também pode procurar tags por relacionamentos. No sentido real, porém, é mais de navegar do que pesquisar.
Existem três relacionamentos principais nos documentos XML:
A partir da explicação acima, você pode inferir que a etiqueta de referência é o fator mais importante na busca de tags por relacionamentos. Portanto, vamos procurar a etiqueta de referência e continuar o artigo.
Dê uma olhada neste:
>>> terceiro_child = bs_content.encontre ("filho", "name": "Blue Ivy")A partir da amostra de código acima, a etiqueta de referência para o restante desta seção será o terceiro criança tag, armazenado em um terceiro_child variável. Nas subseções abaixo, você verá como procurar tags com base em seus pais, irmão e relacionamento com os filhos com a tag de referência.
Encontrando pais
Para encontrar a etiqueta pai de uma tag de referência, você usará o pai atributo. Fazer isso retorna a etiqueta pai, bem como as tags embaixo dela. Esse comportamento é bastante compreensível, já que as tags de crianças fazem parte da tag pai.
Aqui está um exemplo:
>>> resultado = terceiro_child.paiEncontrando crianças
Para encontrar as tags infantis de uma tag de referência, você usará o crianças atributo. Fazer isso retorna as tags das crianças, bem como as sub-marcas sob cada uma delas. Esse comportamento também é compreensível, pois as tags de crianças geralmente têm tags de seus próprios filhos.
Uma coisa que você deve observar é que o crianças atributo retorna as tags de crianças como gerador. Portanto, se você precisar de uma lista das tags de crianças, terá que converter o gerador em uma lista.
Aqui está um exemplo:
>>> resultado = list (terceiro_child.crianças)Se você analisar mais de perto o exemplo acima, você notará que alguns valores na lista não são tags. Isso é algo que você precisa observar.
PEGUEI VOCÊS: O crianças atributo não retorna apenas as tags infantis, ele também retorna o texto na tag de referência.
Encontrando irmãos
O último nesta seção é encontrar tags que são irmãos para a etiqueta de referência. Para cada etiqueta de referência, pode haver tags de irmãos antes e depois. O anterior_siblings o atributo retornará as tags de irmãos antes da etiqueta de referência, e o NEXT_SIBLINGS atributo retornará as tags de irmãos depois dele.
Assim como o crianças atributo, o anterior_siblings e NEXT_SIBLINGS Atributos retornarão geradores. Então você precisa se converter em uma lista se precisar de uma lista de irmãos.
Dê uma olhada neste:
>>> anterior_siblings = list (terceiro_child.anterior_siblings)O primeiro exemplo mostra os irmãos anteriores, o segundo mostra os próximos irmãos; Em seguida, ambos os resultados são combinados para gerar uma lista de todos os irmãos para a etiqueta de referência.
Ao analisar documentos XML, muito do trabalho está em encontrar as tags certas. No entanto, quando você os encontrar, você também pode extrair determinadas informações dessas tags, e é isso que esta seção lhe ensinará.
Você verá como extrair o seguinte:
Extraindo valores de atributo de tags
Às vezes, você pode ter um motivo para extrair os valores para atributos em uma tag. No emparelhamento de valor de atributo a seguir, por exemplo: Nome = ”Rose”, Você pode querer extrair “Rose.”
Para fazer isso, você pode usar o pegar método ou acesso ao nome do atributo usando [] como um índice, assim como faria ao trabalhar com um dicionário.
Aqui está um exemplo:
>>> resultado = terceiro_child.Get ("Nome")Extraindo o texto da tag
Quando você deseja acessar os valores de texto de uma tag, você pode usar o texto ou cordas atributo. Ambos retornarão o texto em uma tag e até as tags das crianças. No entanto, o texto O atributo os devolverá como uma única string, concatenada; enquanto o cordas o atributo os devolverá como um gerador que você pode converter em uma lista.
Aqui está um exemplo:
>>> resultado = terceiro_child.textoExtraindo o conteúdo da tag
Além disso, extraindo os valores do atributo e o texto da tag, você também pode extrair todo o conteúdo de uma tags. Para fazer isso, você pode usar o conteúdo atributo; é um pouco semelhante ao crianças atribuir e produzirá os mesmos resultados. No entanto, enquanto o crianças atributo retorna um gerador, o conteúdo atributo retorna uma lista.
Aqui está um exemplo:
>>> resultado = terceiro_child.conteúdoImpressão bonita
Até agora, você viu alguns métodos e atributos importantes que são úteis ao analisar documentos XML usando o BeautifulSoup. Mas se você perceber, quando você imprimir as tags na tela, elas têm algum tipo de aparência agrupada. Embora a aparência possa não ter um impacto direto na sua produtividade, isso pode ajudá -lo a analisar com mais eficácia e tornar o trabalho menos tedioso.
Aqui está um exemplo de impressão da maneira normal:
>>> Imprimir (terceiro_child)No entanto, você pode melhorar sua aparência usando o embelezar método. Basta ligar para o embelezar método na tag durante a impressão, e você terá algo visualmente agradável.
Dê uma olhada neste:
A análise de documentos é um aspecto importante do fornecimento de dados. Os documentos XML são bastante populares e espero que você esteja melhor equipado para aceitá -los e extrair os dados que deseja.
A partir deste artigo, agora você pode:
Se você se sentir bastante perdido e é bastante novo na biblioteca de belos grupos, pode conferir o tutorial do belo grupo para iniciantes.