1.导入库:
from bs4 import BeautifulSoup
2.创建BeautifulSoup对象:
soup = BeautifulSoup(html, 'html.parser')
3.通过标签名称选择元素:
soup.tagname
4.通过CSS选择器选择元素:
soup.select(selector)
5.获取文本内容:
element.text
6.获取属性值:
element['attribute']
7.遍历子元素:
for child in element.children: # 处理子元素
8.遍历所有后代元素:
for descendant in element.descendants: # 处理后代元素
9.通过标签名查找元素:
soup.find(name)
10.通过属性查找元素:
soup.find('name',attrs={class: 'value',’id’:’value’})
11.查找所有符合条件的元素:
soup.find_all('name',attrs={})
12.获取父元素:
element.parent
13.获取所有兄弟元素:
element.next_siblings
element.previous_siblings
14.通过类名查找元素:
soup.select('[class=""] & [class=""]')
15.通过ID查找元素:
soup.select('#id-name')
16.通过属性查找元素:
soup.select('[attribute=value]')
# 选择属性名为 "class",且属性值包含 "scri" 的元素
elements = soup.select('[class*="scri"]')
17.获取前n个匹配的元素:
soup.find_all(name, limit=n)
18.嵌套选择:可以通过多次使用选择器来进行嵌套选择,以获取更精确的元素:
soup.select('parent-tag > child-tag > grandchild-tag')
19.获取转义后的文本内容:
element.get_text()
20.获取包括子元素的全部文本内容:
element.get_text(separator=' ')
21.格式化输出:使用prettify()方法将BeautifulSoup对象转换为格式化的字符串,以便更好地查看和调试解析结果。
soup.prettify()
22.通过文本内容选择元素:
elements = soup.find_all(text='target_text')```
可以通过指定目标文本内容来选择元素。
23.通过属性值前缀选择元素:
elements = soup.select('[attribute^=value]')
24.通过属性值后缀选择元素:
elements = soup.select('[attribute$=value]')
25.通过属性值包含子字符串选择元素:
elements = soup.select('[attribute*=value]')
26.清除空白字符
element.clear()
27.访问一个元素的直接子节点列表(包含文本)。
from bs4 import BeautifulSoup# 假设有一个HTML文档的内容如下:
html = '''
<html>
<body>
<div id="container">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
</div>
</body>
</html>'''
# 使用Beautiful Soup解析HTML文档
soup = BeautifulSoup(html, 'html.parser')# 选择id为"container"的div元素
div = soup.find('div', id='container')# 使用contents属性获取div元素的直接子节点列表children = div.contents
# 遍历子节点列表并打印内容
for child in children:
print(child)
----------------------------------------------
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
28.css选择器
# :first-child => 获取第一个标签
# :last-child
# :nth-child(n) => n 表示字元素的index
# :not(:nth-child(n)) => 舍弃某个子元素
print(soup.select('div[class="left-liebiao"] > div:first-child'))
print(soup.select('div[class="left-liebiao"] > div:last-child'))
print(soup.select('div[class="left-liebiao"] > div:nth-child(1)'))
print(soup.select('div[class="left-liebiao"] > div:not(:nth-child(1))'))