Resumen de Beautiful Soup

Introducción

Beautiful Soup es una poderosa biblioteca de análisis que se puede usar para analizar código HTML para extraer información, pero se ejecuta lentamente. No es necesario aprender la gramática correspondiente como xpath y expresiones regulares, y solo es necesario llamar al método correspondiente para lograr la extracción de información.

formas de uso común

buscar ()
find_all ()
get_text ()
string
strings
stripped_strings
select

La diferencia entre find () y find_all ()

Supongamos que ya tenemos un carácter de código html que se ha obtenido

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html,'lxml')
#这里选择lxml为解析器,需要先安装lxml这个库
date=soup.find('标签名')
date2=soup.find('标签名')

La nota aquí es que BeautifSoup se encuentra a través de los nodos en el código html. La
diferencia entre find () y find_all () es que find () devuelve los datos de la primera etiqueta de destino y find_all () devuelve todos

Extraer etiquetas con atributos especiales

Suponga que hay una etiqueta <div class='123'>456</div>
que acabamos de escribir;

date=soup.find_all('div',class_='123')

Dado que la clase de atributo tiene el mismo nombre que la palabra clave python, debemos usar un guión bajo para distinguirla.
O puedes escribir así;

date=soup.find_all('div',attrs={
    
    'class':'123'})

Si se deben cumplir más condiciones al mismo tiempo, como extraer esta etiqueta,
<div class='123',classx='789'>456</div>
podemos hacer esto;

date=soup.find_all('div',attrs={
    
    'class':'123','classx':'789'})
或者;
date=soup.find_all('div',class_='123',classx='789')

Tenga en cuenta que lo que se devuelve aquí es un objeto de element.request en lugar de una lista, pero también se puede manipular como una lista.

Extraer texto y valores de atributos (cadenas y cadenas)

1. Extraiga el texto, tome también el ejemplo de ahora, <div class='123'>456</div>
extraiga la información 456
Método uno;


#由于目前只有一个div标签并且没有或者只有一个子节点如果有多个div可以放进循环当中遍历。
date=soup.find_all('div',class_='123',classx='789')[0]
text=date.string
#这里返回一个字符串,提取当前一个节点下的文字

Método dos;

date=soup.find_all('div',class_='123',classx='789')
#假设div的匹配结果唯一
texts=list(date.strings)
text=[]
for text_one in texts;
	text.append(text_one)
"""
这里需要注意的是strings可以提取改节点下所有文字 假设div节点下面有多个子节点,有多个则可以使用strings但是返回的是一个生成器可以遍历出来。
"""

En una situación más complicada, hay varios nodos div y varios nodos secundarios (dx) a continuación para extraer texto.
El código es el siguiente;
(usando cadenas)

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	dates=div.strings
	for date in dates;
		text.append(date)

(Use cuerda)

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	dxs=div.find_all('dx')
	for dx in dxs;
		date=dx.string
		text.append(date)

Cómo extraer el valor del atributo Por ejemplo <div class='123'>456</div>, el
código de '123' en la extracción es el siguiente;


date=soup.find_all('div',class_='123')
attribute=date['class']

Para cada objeto devuelto, hay atributos (atributos en html) (atributos en BeautifulSoup).

Manejar espacios en blanco

Use cadenas para colocar los espacios en blanco extraídos en la lista para que pueda ser así;
use stripped_strings

text=[]#存放文本信息
divs=soup.find_all('div',class_='123',classx='789')
for div in divs;
	#dates=div.strings
	dates=list(div.stripped_strings)
	
	for date in dates;
		text.append(date)

Usar sentencias select y css

Lo primero que hay que explicar es que select () es similar a find_all (). La diferencia es que las condiciones del filtro son diferentes.
Como cribado; <div class='123'>456</div>(asumiendo que solo coincide con el resultado)

divs=soup.find_all('div',class_='123',classx='789')
divs=soup.select('div.123')

Ambos tienen el mismo efecto, pero el último requiere el uso de sentencias de selección CSS.

declaración de selección de CSS

Inserte la descripción de la imagen aquí
La parte subrayada en el cuadro es la oración de selección, que se utiliza para filtrar nodos específicos para el diseño.
La declaración se muestra en la siguiente tabla;
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Se puede ver contenido más específico en 3wschool , pero en términos generales, no se puede usar tanto, básicamente se puede usar find_all () para lograrlo, y la eficiencia del rastreo de información de la página web simple y la extracción de información es menor que la de Xpath. Es una mejor opción elegir regular Debido a que no solo puede extraer información html, puede extraer casi toda la información de texto. Si está interesado, puede consultar la serie de rastreadores de Python en el blog que escribí antes
(3)

Supongo que te gusta

Origin blog.csdn.net/FUTEROX/article/details/107464258
Recomendado
Clasificación