banner
AndrewTsui

AndrewTsui

BeautifulSoup 学习笔记

Beautiful Soup 的基础使用#

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')

节点选择器#

直接调用节点的名称,再调用 string,就可以节点内的文本

soup.a.string   --->获取第一个 a 标签的文本,返回文本字符串
soup.a    --->获取第一个 a 标签的 html 代码(Tag 类型),可嵌套选择
soup.a.attrs['class']
soup.a['class'] --->获取属性;属性唯一,返回字符串;属性不唯一,返回列表;

关联选择#

  • 子节点
soup.a.contents   --->返回列表
soup.a.children  --->返回生成器
  • 子孙节点
soup.a.descendands  --->返回生成器
  • 父节点
soup.a.parent  --->返回第一个a节点的父节点
  • 祖先节点
soup.a.parents  --->返回生成器
  • 兄弟节点
soup.a.next_sibling  --->返回下一个兄弟节点
soup.a.previous_sibling  --->返回上一个兄弟节点
soup.a.next_siblings  --->返回后面的兄弟节点,生成器类型
soup.a.previous_siblings  --->返回前面的兄弟节点,生成器类型

以上方法返回结果是单个节点,可直接调用 string、attrs 等属性获得其文本和属性内容;
如果返回的是多个节点的生成器,则可转化为列表后,取出某个元素然后再调用 string、attrs 等属性;

方法选择器#

find_all(name, attrs, recusive, text, **kwargs): 查询所有符合条件的元素

  • name :根据节点名查询,返回列表,Tag 类型
    • attrs:根据属性来查询,返回列表,Tag 类型
soup.find_all(attrs={'id':'list-1'})
soup.find_all(id='list-1')
soup.find_all(class_='element')  --->class为python关键字,后边需加'_'
  • text:该参数可用来匹配节点的文本,传入形式可以是字符串,也可以是正则表达式对象
soup.find_all(text=re.compile('link')) -->返回所有匹配正则表达式的节点文本组成的列表

find(name, attrs, recusive, text, **kwargs):查询第一个符合条件的元素,用法与find_all() 相同,返回的是单个 Tag 类型

CSS 选择器#

调用 select() 方法,传入相应的 CSS 选择器即可:soup.select('CSS 选择器语句') 返回列表,元素为 Tag 类型

1.支持嵌套选择
for ul in soup.select('ul'):
	print(ul.select('li'))
            
2.获取属性
for ul in soup.select('ul'):
	content = ul['id']
	content = ul.attrs['id']

3.获取文本
for ul in soup.select('ul'):
	content = ul.string       --->获取直系文本
	content = ul.get_text()   --->获取节点内的所有文本
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。