(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)
- Necesita un analizador de etiquetas, por ejemplo: recorrido del árbol de etiquetas de la biblioteca bs4
- Ventajas: análisis de información precisa
- 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
- Buscar: encuentra la función del texto de la información
- Ventajas: el proceso de extracción es simple y rápido
- 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
(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 |