Documentación rápida de BeautifulSoup

Documentación de BeautifulSoup

Instalación

En Debian y Ubuntu, se puede instalar a través del administrador de paquetes

apt-get install python-bs4 # python2
apt-get install python3-bs4 # python3

O puede usar directamente el administrador de paquetes de Python para instalar

pip install beautifulsoup4
easy_install install beautifulsoup4

Instalar un analizador

Beautiful Soup usa el analizador HTML predeterminado en la biblioteca estándar de Python de forma predeterminada. Sin embargo, para obtener una cierta mejora del rendimiento en la velocidad de análisis, podemos seleccionar manualmente algunos analizadores.

Analizador ejemplo ventaja Desventaja
Html.parser de Python BeautifulSoup (marcado, "html.parser") Ninguna velocidad de dependencia externa aún puede admitir más versiones de Python Es más lento que lxml y tiene menos funciones que html5lib
analizador HTML de lxml BeautifulSoup (marcado, "lxml") Soporte muy rápido para más versiones de Python Confíe en C
Analizador XML de lxml BeautifulSoup (marcado, "lxml-xml") Soporte muy rápido para XML Confíe en C
html5lib BeautifulSoup (marcado, "html5lib") El método de análisis es similar al de los navegadores web que admiten html5 La velocidad es más lenta, algunas pitones se basan en

Hacer la sopa

De forma predeterminada, se admiten objetos similares a archivos o los campos Unicode se utilizan directamente.

from bs4 import BeautifulSoup

with open("index.html") as f:
    soup = BeautifulSoup(fp)
soup = BeautifulSoup("<html>data</html>")

Tipos de objetos

BeautifulSoup analizará el documento html en un árbol complejo de objetos Python. Sin embargo, los únicos objetos para operaciones generales son Tag, NavigableString, BeautifulSoup y Comment.

Etiqueta

Corresponde a la etiqueta Tag en html

soup = BeautifulSoup("<a id=\"c\">Hello</a>"
tag = soup.b
type(tag) === Tag

# name
tag.name # a
# change name
tag.name = "c"

# attributes
tag["id"] # c
tag.attrs # {"id": "c"}
# operate tag's attribute
tag["id"] = "ddd" # <a id="ddd">Hello</a>
tag["id2"] = "ccc" # <a id="ddd" id2="ccc">Hello</a>
del tag["id2"] # <a id="ddd">Hello</a>
tag.get("id") # ddd

# multi-value attributes
”“”
BeautifulSoup支持将具有多个值的标签属性解析为一个列表,默认此属性是开启的,比如对于class属性
<a class="cls1 cls2"></a> => Tag_a["class"] => ["cls1", "cls2"]
我们可以通过在BeautifulSoup的生命中设置multi_valued_attributes选项控制此解析行为
“”“
css_soup = BeautifulSoup('<p class="body"></p>')
css_soup.p['class']
# ["body"]

css_soup = BeautifulSoup('<p class="body strikeout"></p>')
css_soup.p['class']
# ["body", "strikeout"]

no_list_soup = BeautifulSoup('<p class="body strikeout"></p>', 'html', multi_valued_attributes=None)
no_list_soup.p['class']
# u'body strikeout'

NavigableString

Se usa para representar texto en etiquetas html

tag.string # str
type(tag.string) # bs4.element.NavigableString

# 可以直接使用Unicode字符串进行转换
uncideo_string = unicode(tag.string)

# 该对象不支持直接编辑
# 可以直接通过replace_with对于字符串内容进行编辑
tag.string.replace_with("hello") # <tag>str</tag> -> <tag>hello</tag>

Si necesita utilizar adicionalmente el contenido de texto del objeto, se recomienda utilizar Unicode para la conversión, ya que utilizará todo el árbol de análisis, lo que provocará una pérdida de memoria.

Hermosa Sopa

El objeto BeautifulSoup se puede utilizar como una etiqueta básica en la mayoría de los casos, y la mayoría de los métodos de etiqueta son compatibles y su atributo de nombre es un valor específico [document].

Notas sobre el documento y algunos caracteres especiales

Comentario

Para comentarios, el contenido obtenido por diferentes formas de acceso es diferente

soup = BeautifulSoup("<b><!--Hey?--></b>")
comment = soup.b.string # => bs4.element.Comment
comment # Hey?
soup.b.prettify() # =>
"""
<b>
  <!--Hey?-->
</b>
"""

Hoja de estilo 、 Script 和 TemplateString

BeautifulSoup admite el análisis de hojas de estilo, secuencias de comandos y TemplateString en documentos HTML en los objetos correspondientes.

<style></style> <!-- bs4.element.Stylesheet -->
<script></script> <!-- bs4.element.Script -->
<template></template> <!-- bs4.element.TemplateString -->

Tenga en cuenta que esta función solo es compatible con BeautifulSoup> 4.9.0, y el analizador html5lib actual no admite
estos objetos de la misma manera que los objetos NavigableString.

CDATA

Para objetos CDATA especiales, también hay algunas categorías nuevas específicas, como CData.

from bs4 import BeautifulSoup
cdata = CData("A CDATA block")
soup.xml.replace_with(cdata)
soup.xml.prettify() # =>
"""
<xml>
  <![CDATA[A CDATA block]]>
</xml>
"""

Árbol de navegación

Documento oficial

(Continuará)

Supongo que te gusta

Origin blog.csdn.net/m0_37964621/article/details/105873469
Recomendado
Clasificación