Beautifulsoup4使用
Beautiful Soup
自动将输入文档转换为Unicode编码, 输出文档转换为utf-8编码- 使用前安装
pip install beautifulsoup4
- 引入
from bs4 import Beautifulsoup4
获取内容
- 标签有两个重要的属性name, attrs
- 文本内容的获取有三种方法
.string
方法返回一个迭代器.text
方法返回节点文本.get_text()
方法返回节点文本
## 获取标题对象
print(soup.title) # <title>xPath方法</title>
# 获取标题内容
print(soup.title.string) # 返回迭代器
print(soup.title.text)
print(soup.title.get_text())
print(soup.find('title').get_text())
- 通过上下级获得对象
# print(soup.title.parent) # 返回父节点包括父节点中的内容
print(soup.li.child) # Node
print(soup.li.children) # 返回一个迭代器
获取第一个li标签
print(soup.li.get_text()) # 匹配到第一个,返回所有节点的文本信息
print(soup.find('li').text)
# 获取ul的子标签们 (空行也看成了一个children)
print(soup.ul.children)
for index, item in enumerate(soup.ul.children):
print(index, item)
获取元素的属性
- 使用
.属性名
的方法, 但是只能获取到一个 - 使用
元素.attrs['属性名']
的方法返回的时一个列表 - 如果使用两次
soup.元素
第一次获取的是匹配到的第一个元素, 第二次是匹配到的第二个元素
获取多个元素
- find方法获取一个元素
- find_all获取多个元素, 可以加上
limit
来达到限制个数的问题,recursive = True
寻找子孙 ;recursive = False
只找子 - 多层级查找 find_all返回的是一个列表 可以遍历该列表再次使用find方法或者find_all方法 进行元素的获取
通过指定的属性, 获取对象
- id和class选择器, class比较特殊, 因为是关键字 在使用class时改成
class_
print(soup.find(id='a'))
print(soup.find('a', id='a'))
print(soup.find_all('a', id='a')) # 可以使用下标查询
# class是关键字 要这么写class_
print('class1', soup.find_all('a', class_='a'))
print('class2', soup.find_all('a', attrs={'class': 'item'})) # 更通用
print('class3', soup.find_all('a', attrs={'class': 'item', 'id': 'a'})) # 多条件
使用函数作为参数, 返回元素
def judgeTilte1(t):
if t == 'a':
return True
print(soup.find_all(class_=judgeTilte1))
- 根据长度来判断
# 判断长度
import re # 正则表达式
reg = re.compile("item")
def judgeTilte2(t):
# 返回长度为5,且包含'item'的t参数
return len(str(t)) == 5 and bool(re.search(reg, t))
print(soup.find_all(class_=judgeTilte2))
可以使用css选择器
- select方法返回的都是一个列表
- 可以通过标签名查找, 属性查找, 标签+类名+id, 组合查找
Python中BeautifulSoup库的用法
python beautiful soup库的超详细用法
python 爬虫 提取文本之BeautifulSoup详细用法