Python crawler learning (5) recuperación de contenido HTML basado en la biblioteca bs4

(5) Recuperación de contenido HTML basado en la biblioteca bs4

(1) Marcado de información

  • La información marcada puede formar una estructura de organización de la información, lo que aumenta la dimensión de la información.

  • La estructura de las etiquetas es tan importante como la información.

  • La información marcada se puede utilizar para comunicación, almacenamiento o visualización.

  • La información marcada es más propicia para la comprensión y aplicación del programa.

  • Ejemplo: HTML es el método de organización de información WWW (World Wide Web)

  • HTML organiza diferentes tipos de información a través de etiquetas <> ... </> predefinidas

(2) Tres formas de marcado de información

1.XML

<!-- XML(eXtensible Markup Language) -->

<!-- 标签tag -->
<!-- 名称img 后接属性 -->
<img src="china.jpg" size="10">...</img>
<!-- 空元素的缩写形式 -->
<img src="china.jpg" size="10" />
<name>...</name>
<name />
<!-- -->

2.JSON

  • De acuerdo con la especificación JSON, los comentarios no son compatibles
  • Principalmente con el fin de evitar comentarios excesivos y afectar el soporte de datos del archivo en sí
JSON(JavaScript Object Notation)

//有类型的键值对 key:value
//"name"是类型
"name" : "靓仔"
//多值用[,]组织
"name" : ["靓仔", "美眉"]
//键值对嵌套用{,}
"name" : {
    "newName" : "钢铁侠二代" ,
    "oldName" : "钢铁侠一代"
}

//三种书写形式
"key" : "value"
"key" : ["value1", "value2"]
"key" : {"subkey" : "subvalue"}

3.YAML

YAML(YAML Ain't Markup Language)

# 无类型的键值对 key:value
# name仅是字符串
name : 靓仔
# 缩进表达所属关系
name :
	newName : 钢铁侠二代
	oldName : 钢铁侠一代
# - 表达并列关系
name :
-钢铁侠二代
-钢铁侠一代
# | 表达整块数据
text: |		#示例乱码
sdadadwafaqagerghehreqtggfqegqeg
regrqegrqegeqgreqgregqegqergqert

# 三种书写形式
key : value
key : #Comment
-value1
-value2
key :
	subkey : subvalue

(3) Comparación de tres formas de marcado de información

  • XML

  • El primer lenguaje de marcado de información general, buena escalabilidad, pero engorroso

  • Intercambio y transmisión de información en Internet.

  • JSON

  • Hay tipos de información, adecuados para el procesamiento de programas (js), más concisos que XML

  • Nube de aplicaciones móviles y comunicación de información de nodos, sin notas

  • yamla

  • Ningún tipo de información, la mayor proporción de información de texto y buena legibilidad

  • Archivos de configuración de varios sistemas, fáciles de leer con notas.

(4) Extracción de información y método

  • Extracción de información: extraiga el contenido de interés de la información marcada

1. Método general uno

  • Analice completamente la forma de marcado de la información y luego extraiga la información clave
  • XML 、 JSON 、 YAML)
  1. Necesita un analizador de etiquetas, por ejemplo: recorrido del árbol de etiquetas de la biblioteca bs4
  2. Ventajas: análisis de información precisa
  3. Desventajas: el proceso de extracción es engorroso y lento

2. Método general 2

  • Ignorar el formulario de marca, buscar directamente información clave
  1. Buscar: encuentra la función del texto de la información
  2. Ventajas: el proceso de extracción es simple y rápido
  3. La precisión de los resultados de extracción está relacionada con el contenido de la información.

3. Método de fusión

  • Combine análisis formales y métodos de búsqueda para extraer información clave
  • (XML, JSON, YAML, búsqueda)
  • Necesita un analizador de etiquetas y una función de búsqueda de texto

4. Ejemplos

Inserte la descripción de la imagen aquí

(5) Método de búsqueda de contenido HTML basado en la biblioteca bs4

# 返回一个列表类型,存储查找的结果
<>.find_all(name, attrs, recursive, string, **kwargs)

# 检索目标标签名为a,b
soup.find_all('a')
soup.find_all(['a','b'])
# 检索目标标签名为p,含属性course
soup.find_all('p','course')
# 检索目标含指定属性,引入re库(正则表达式库)
soup.find_all(id='link1')
soup.find_all(id=re.compile('link'))

#由于find_all方法很常用,为方便使用
<tag>(..) 等价于 <tag>.find_all(..)
soup(..)  等价于 soup.find_all(..)
Nombre del parámetro Explicación
nombre Cadena de búsqueda para nombre de etiqueta
attrs Cadena de búsqueda para el valor del atributo de etiqueta
recursivo Si buscar todos los descendientes, True predeterminado
cuerda La cadena de búsqueda en el área de la cadena en <> ... </>
Método Explicación
<>. find () Buscar y devolver solo un resultado, tipo de cadena
<>. find_parents () Busque en el nodo ancestro y devuelva el tipo de lista
<>. find_parent () Devuelve un resultado en el nodo ancestro
<>. find_next_siblings () Buscar en nodos paralelos posteriores y devolver el tipo de lista
<>. find_next_sibling () Devuelve un resultado en nodos paralelos posteriores
<>. find_previous_siblings () Busque en el nodo paralelo de preorden y devuelva el tipo de lista
<>. find_previous_sibling () Devuelve un resultado en el nodo paralelo de preorden
Método Explicación
<>. find () Buscar y devolver solo un resultado, tipo de cadena
<>. find_parents () Busque en el nodo ancestro y devuelva el tipo de lista
<>. find_parent () Devuelve un resultado en el nodo ancestro
<>. find_next_siblings () Buscar en nodos paralelos posteriores y devolver el tipo de lista
<>. find_next_sibling () Devuelve un resultado en nodos paralelos posteriores
<>. find_previous_siblings () Busque en el nodo paralelo de preorden y devuelva el tipo de lista
<>. find_previous_sibling () Devuelve un resultado en el nodo paralelo de preorden
10 artículos originales publicados · Me gusta1 · Visitas 137

Supongo que te gusta

Origin blog.csdn.net/qq_39419113/article/details/105635138
Recomendado
Clasificación