import requests
from bs4 import BeautifulSoup
url = 'http://python123.io/ws/demo.html'
r = requests.get(url)
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
Los elementos básicos de la clase 1.Beautiful sopa
elementos básicos | explicación |
---|---|
Etiqueta | Etiqueta, la información básica medios de bloqueo, respectivamente <> y </> indicar el principio y el fin |
Nombre | etiqueta con su nombre, <p> ... </ p> nombre es 'p', el formato: <tag> .name |
atributos | Atributos de código, organizados en el diccionario, el formato: <etiqueta> .attrs |
NavigableString | no es la cadena atributo en la etiqueta, <> ... </> cadena en el formato: <tag> .string |
Comentario | Tenga en cuenta la parte de etiqueta de la cadena, un tipo especial comentario |
# Tag
# 获取网页的标题
print(soup.title)
# <title>This is a python demo page</title>
# 获取html的a标签的内容
# 默认获取第一个标签
print(soup.a)
# Name
# 获取标签的名字
print('标签名字:', soup.a.name)
# Attributes
# 获取属性信息
tag = soup.a
print(tag.attrs)
# NavigableString
# 获取a标签的字符串信息
print(soup.a.string)
# Comment
new_soup = BeautifulSoup("<b><!--This is a comment--></b><p>This is not a comment</p>", "html.parser")
print(new_soup.b.string)
# This is a comment
print(type(new_soup.b.string))
# <class 'bs4.element.Comment'>
print(new_soup.p.string)
# This is not a comment
print(type(new_soup.p.string))
# <class 'bs4.element.NavigableString'>
2. El número de enlace descendente etiqueta traversal
propiedad | explicación |
---|---|
.contenido | Lista de nodos secundarios de la lista <etiqueta> de todos los nodos hijo en |
.niños | Iterator tipo de nodos secundarios, y .Contenido similares para el bucle itera nodo hijo |
.descendientes | Iterativo tipo de nodo descendiente, que comprende todos los nodos descendientes, un bucle a través |
import requests
from bs4 import BeautifulSoup
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
# 获取body标签下的所有节点并存入列表中
print(soup.body.contents)
print(type(soup.body.contents))
# <class 'list'>
# 遍历儿子节点
for child in soup.body.children:
print(child)
# 遍历子孙节点
for desc in soup.body.descendants:
print(desc)
Atravesando el árbol 3. Etiqueta
propiedad | explicación |
---|---|
.padre | etiqueta nodo padre |
.parents | etiquetas de tipo nodo ancestro iterativos para un bucle a través del nodo ancestro |
# 标签数的上行遍历
# 遍历a标签的所有父节点
for parent in soup.a.parents:
if parent is None:
print(parent)
else:
print(parent.name)
# title的父标签
print(soup.title.parent)
4. recorrido del árbol etiqueta paralelo
propiedad | explicación |
---|---|
.proximo hermano | Devuelve el siguiente nodo en paralelo de acuerdo con el procedimiento de la etiqueta de texto HTML |
.previous_sibling | Devuelve la etiqueta de texto HTML un nodo paralelo según el orden |
.next_siblings | tipo iterativo, texto HTML devuelve en orden para todos etiqueta nodo subsiguiente paralelo |
.previous_siblings | tipo iterativo, el retorno Continuación todo el texto etiquetas HTML nodos paralelas, de conformidad con el orden |
# 遍历后续节点
for sibling in soup.a.next_siblings:
print(sibling)
# 遍历前续节点
for sibling in soup.a.previous_siblings:
print(sibling)
resumen:
biblioteca 5.bs4 prettify método ()
El texto de formato HTML el contenido o parte de la etiqueta (cada etiqueta se sumará una faja de espalda)
import requests
from bs4 import BeautifulSoup
r = requests.get("http://python123.io/ws/demo.html")
demo = r.text
soup = BeautifulSoup(demo, "html.parser")
print(soup.prettify())
print(soup.a.prettify())
6. El método Buscar
find_all(name, attrs, recursive, string, **kwargs)
:
Devuelve un tipo de lista, resultado de almacenamiento de las operaciones de búsqueda.
- name: String para recuperar el nombre de la etiqueta
- attrs: valores de atributos de búsqueda de etiqueta cadena de caracteres, búsqueda de atributos se pueden marcar
- recursiva: Ya sea para recuperar todos los descendientes, por defecto Verdadera
- Recuperando cadena de caracteres <> ... </> región de cadena: cadena
import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://python123.io/ws/demo.html")
soup = BeautifulSoup(r.text, "html.parser")
# 查找所有a标签
print(soup.find_all('a'))
print(type(soup.find_all('a')))
# <class 'bs4.element.ResultSet'>
for tag in soup.find_all('a'):
print(tag.string)
# 显示a 和 b 标签
print(soup.find_all(['a', 'b']))
# 显示soup的所有标签信息
for tag in soup.find_all(True):
print(tag.name)
# 使用正则表达式来查找含有b的标签
for tag in soup.find_all(re.compile('b')):
print(tag.name)
# 查找p标签含有course的内容
print(soup.find_all('p', 'course'))
# 查找id属性为link1的内容
print(soup.find_all(id='link1'))
# 查找id属性为link的内容 没有则返回[]
print(soup.find_all(id='link'))
# 使用re模块来查找id属性包含link的内容
print(soup.find_all(id=re.compile('link')))
# 设置recursive参数为False, 这时从soup的子节点进行检索, 而不会去检索子孙节点的内容
print(soup.find_all('a', recursive=False))
# 检索字符串是否存在
print(soup.find_all(string="Basic Python"))
# 检索字符串是否含有python, 通过re
print(soup.find_all(string=re.compile('Python')))
El Consejo:
<Tag> (...) es equivalente a <Tag> .find_all (...)
Sopa (...) es equivalente a soup.find_all (...)
Métodos de extensión
método | explicación |
---|---|
<>. Find () | Buscar y sólo devuelve un resultado de tipo cadena, con .find_all () Parámetros |
<>. Find_parents () | Buscar antepasado nodo, devuelve una lista de tipos, con .find_all () Parámetros |
<>. Find_parent () | Antepasado nodo devuelve un resultado de tipo cadena, con .find () parámetros |
<>. Find_next_siblings () | En la búsqueda posterior de un nodo paralelo, devuelve una lista de tipos, el mismo .find_all () parámetros |
<>. Find_next_sibling () | En el posterior retorno a un nodo paralelo resultado, tipo de cadena, con .find () parámetros |
<>. Find_previous_siblings () | nodos de búsqueda de secuencias en paralelo en la parte delantera, devuelve una lista de tipos, el mismo .find_all () Parámetros |
<>. Find_previous_sibling () | Secuencia paralelo en el nodo frontal devuelve un resultado de tipo cadena, con .find () parámetros |
Caso reptil