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) # Nodeprint(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 Trueprint(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详细用法
