Notas de répteis: Uso de sopa bonita (6)

Este artigo apresenta como usar o Beautiful Soup. Este módulo é usado para analisar o html e sua operação é muito simples e fácil de usar.

Este é um módulo de terceiros que precisa ser instalado

instalação do pip beautifulsoup4 
instalação do pip lxml

 Belo objeto de sopa

Beautiful converte documentos HTML complexos em uma estrutura de árvore complexa, cada nó é um objeto python e todos os objetos podem ser resumidos em 4 tipos:

Tag

Tag, obtenha conteúdo através da tag html. Por exemplo, uma tag, se houver várias, pegue a primeira

html = "" " 
<html><head><title>Baidu</title> </head> 
<body> 
<div> 
<p class =" content "> 搜索
<a href =" http://www.baidu .com "class =" link "id =" link1 "> <! - 首页 -> </a>, 
<a href =" http://www.baidu.com/page/3.html "class = "link" id = "link2"> 搜索 1 </a> e 
<a href="http://www.baidu.com/page/47.html" class="link" id="link3"> 搜索 2 </a>; 
请 点击 的 的 链接. </p> 
<p class = "content">. 这 是 广告 植入. </p> 
<p class = "title"> 百度 </p> 
</ div > 
</body> 
</html> 
""" 
obj = BeautifulSoup (html, 'lxml') # Seguido da especificação do uso da análise lxml, a velocidade da análise lxml é relativamente rápida e a tolerância a falhas é alta. 
print (obj.prettify ()) # saída formatada html 
print (obj.title) # aidu. com pega o conteúdo da tag title tag 
(obj.p) 
# tag possui dois atributos, um é nome e o outro é attr
# name, o atributo name é o nome da tag, por exemplo, a tag é o nome impresso é 
# attrs, attrs é o atributo dessa tag, por exemplo, os atributos da tag a acima são class, href, id, ele é um dicionário 
# Como attrs é um dicionário, você pode usar a chave para obter o valor 

print (obj.a.name) # o nome de uma etiqueta, que é uma 
impressão (obj.a.attrs) # o atributo de uma etiqueta, que é a classe href identifique-os e qual é o valor correspondente 
print (obj.a.attrs ['href']) # # Obtenha o atributo href da marca a, ou seja, http://www.baidu.com 
print (obj.a.attrs .get ('href')) # Como attrs é um dicionário, você também pode usar o método .get para obter o mesmo valor que os colchetes acima

  NavigableString

Ou seja, o conteúdo e o texto em uma tag são obtidos, por exemplo, o conteúdo na tag de título acima é obtido

print (obj.title.string) #Baidu 
print (obj.a.string) # 首页
print (tipo (obj.title.string)) # <classe 'bs4.element.NavigableString'> NavigableString

  Beautifulobj

O objeto Beautifulobj é representar o html inteiro, por exemplo, o objetivo acima é o objeto Beautifulobj, através do qual operar várias tags

print (type (obj)) #Beautifulobj objeto

 Comente

O objeto Comment é um tipo especial de objeto NavigableString. Na verdade, o conteúdo de saída ainda não inclui o símbolo de comentário, mas se não for tratado adequadamente, poderá causar problemas inesperados no processamento de texto. Por exemplo, em uma tag acima, a página inicial é anotada.

print (obj.a.string) # Página inicial, não incluindo <! -> Comment 
print (type (obj.a.string)) # <class 'bs4.element.Comment'> Tipo de comentário 
# Na verdade, é O conteúdo do comentário, quando o retiramos da string, não há símbolo de comentário, então preste atenção aqui

 Operações chave

O acima é obtido através de um determinado rótulo: se você deseja obter diretamente alguns rótulos, precisa usar outros métodos para obter determinados atributos.

   Tags de pesquisa

# find_all method find_all (name, attrs, recursive, text, ** kwargs) 
# O método find_all é usado para pesquisar todas as tags atuais para determinar se elas atendem às condições de filtragem e, em caso afirmativo, retornar uma lista de 
impressão qualificada (obj.find_all (' p ')) # Encontre todas as tags p 
print (obj.find_all ([' a ',' p '])) # Encontre todas as tags 
aep 

# Especifique o atributo print (obj.find_all (id =' link1 ')) # Encontre 
print with id link1 (obj.find_all (id = ['link1', 'link2'])) # Encontre id com link1 e link2 

# Como classe é uma palavra-chave em python, se você deseja encontrar o atributo de classe, não pode Escreva a classe diretamente, escreva class_ 
print (obj.find_all (classe _ = 'link')) # classe é link, 
imprima (obj.find_all (classe _ = ['link', 'conteúdo'])) # class is link and conent 
print (obj.find_all (attrs = ('class': 'link', 'id': 'link1'})) # Vários atributos também podem ser gravados diretamente em um dicionário, o nome do atributo é escrito como chave e o valor como valor 
print (obj.find_all ('p', class _ = 'content')) # Encontre a classe com o conteúdo da tag p

print (type (obj.find (class _ = 'link'))) # # A diferença entre o método find e o método findall é que findall retornará todos os rótulos e os colocará em uma lista. 
# find method retorna um rótulo e encontra vários Se você quiser, pegue o primeiro. Outros usos são os mesmos

  seletor de css

O seletor css é obter as tags html através do CSS para obter os elementos. É muito conveniente para as pessoas familiarizadas com o css usá-lo. No seletor css, "." Representa a classe selecionada, "#" representa o ID selecionado .

print ('p', obj.select ('p')) # selecione por rótulo 
print (obj.select ('a')) # selecione por rótulo 
print (obj.select ('. content')) # por nome da classe Selecione 
print (obj.select ('# link1')) # Selecione 
print (obj.select ('p .link')) por id # Combine pesquisa, encontre 
print (obj.select ('p com o título da classe sob a tag p # link1 ')) # Pesquisa combinada, localize a 
impressão com o ID do link no link p (obj.select (' a # link1 ')) # # Pesquisa combinada, localize o ID com link1 na tag a , Find 
print (obj.select ('p> a')) no mesmo nível # busca de combinação de tags, encontre a tag a sob a tag p 

print (obj.select ('a [class = link]')) # atributo search , Encontre a 
impressão (obj.select ( 
    'pa [href = http: //www.baidu.com/page/47.html]')) cuja classe está vinculada à marca a # # Use-a em combinação, na marca a sob a marca p Encontre href para http://www.baidu.com/page/47.html

  Conteúdo do nó

O nó é como obter os vários nós do html, como outras divs no mesmo nível da div, as sub tags abaixo da div, etc.

# content tag O atributo .contents pode gerar os nós filhos da tag como uma lista. 
	 #children children é o mesmo que content, que também é para obter nós filhos, mas filhos não é uma lista, mas um gerador de 
impressão (obj.div.contents) # Obtenha todas as tags abaixo da div 
print (obj.div.children) #Este é um gerador, a impressão é um objeto gerador, se você deseja obtê-lo, deve fazer um loop 
para chil em obj.div.children: 
	print (chil ) 
 
 
 
# Através do conteúdo e os filhos devem obter nós filhos, se você deseja obter os filhos e netos através dos descendentes 
# print (obj.descendants) e o resultado dessa aquisição também é um iterador 
# 
# nó pai e nó ancestral 
# 
# através de obj. a.parent pode obter as informações do nó pai 
# 
# O nó ancestral pode ser obtido através de obj.a.parents, o resultado retornado por esse método é uma lista, as informações do nó pai da marca a serão armazenadas na lista e o nó pai O nó pai de também é colocado na lista e, finalmente, o documento inteiro será colocado na lista, o último elemento de todas as listas e o penúltimo elemento são A informação é mantida documento inteiro 
# 
# irmão 
# 
# obj.a.next_siblings ficar atrás irmãos 
# obj.a.previous_siblings chegar na frente de irmão
# obj.a.next_sibling Obter o próximo rótulo de irmão 
# obj.a.previous_sinbling Obter o rótulo de irmão anterior

  Sumário

Falamos principalmente sobre como obter várias tags e elementos em html. A modificação e a exclusão não são gravadas, porque os rastreadores geralmente não precisam ser modificados e a obtenção de dados é suficiente. O find_all () e o seletor CSS são comumente usados.Se você estiver familiarizado com CSS, é recomendável usar o seletor CSS. A pesquisa por tag e o seletor de css são muito comuns aqui.

 

 

Acho que você gosta

Origin www.cnblogs.com/wxcx/p/12732258.html
Recomendado
Clasificación