Beautifulsoup4使用

  • Beautiful Soup自动将输入文档转换为Unicode编码, 输出文档转换为utf-8编码
  • 使用前安装 pip install beautifulsoup4
  • 引入from bs4 import Beautifulsoup4

获取内容

  • 标签有两个重要的属性name, attrs
  • 文本内容的获取有三种方法
  • .string方法返回一个迭代器
  • .text方法返回节点文本
  • .get_text()方法返回节点文本
  1. ## 获取标题对象
  2. print(soup.title) # <title>xPath方法</title>
  3. # 获取标题内容
  4. print(soup.title.string) # 返回迭代器
  5. print(soup.title.text)
  6. print(soup.title.get_text())
  7. print(soup.find('title').get_text())
  • 通过上下级获得对象
  1. # print(soup.title.parent) # 返回父节点包括父节点中的内容
  2. print(soup.li.child) # Node
  3. print(soup.li.children) # 返回一个迭代器

获取第一个li标签

  1. print(soup.li.get_text()) # 匹配到第一个,返回所有节点的文本信息
  2. print(soup.find('li').text)
  3. # 获取ul的子标签们 (空行也看成了一个children)
  4. print(soup.ul.children)
  5. for index, item in enumerate(soup.ul.children):
  6. print(index, item)

获取元素的属性

  • 使用 .属性名 的方法, 但是只能获取到一个
  • 使用元素.attrs['属性名']的方法返回的时一个列表
  • 如果使用两次 soup.元素 第一次获取的是匹配到的第一个元素, 第二次是匹配到的第二个元素

获取多个元素

  • find方法获取一个元素
  • find_all获取多个元素, 可以加上limit来达到限制个数的问题, recursive = True 寻找子孙 ; recursive = False只找子
  • 多层级查找 find_all返回的是一个列表 可以遍历该列表再次使用find方法或者find_all方法 进行元素的获取

通过指定的属性, 获取对象

  • id和class选择器, class比较特殊, 因为是关键字 在使用class时改成class_
  1. print(soup.find(id='a'))
  2. print(soup.find('a', id='a'))
  3. print(soup.find_all('a', id='a')) # 可以使用下标查询
  4. # class是关键字 要这么写class_
  5. print('class1', soup.find_all('a', class_='a'))
  6. print('class2', soup.find_all('a', attrs={'class': 'item'})) # 更通用
  7. print('class3', soup.find_all('a', attrs={'class': 'item', 'id': 'a'})) # 多条件

使用函数作为参数, 返回元素

  1. def judgeTilte1(t):
  2. if t == 'a':
  3. return True
  4. print(soup.find_all(class_=judgeTilte1))
  • 根据长度来判断
  1. # 判断长度
  2. import re # 正则表达式
  3. reg = re.compile("item")
  4. def judgeTilte2(t):
  5. # 返回长度为5,且包含'item'的t参数
  6. return len(str(t)) == 5 and bool(re.search(reg, t))
  7. print(soup.find_all(class_=judgeTilte2))

可以使用css选择器

  • select方法返回的都是一个列表
  • 可以通过标签名查找, 属性查找, 标签+类名+id, 组合查找

Python中BeautifulSoup库的用法
python beautiful soup库的超详细用法
python 爬虫 提取文本之BeautifulSoup详细用法