# 一、 定义:灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便的实现网页信息
# 的提取
# BeautifulSoup支持的解析库:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html(官方文档)
# 二、 基本使用
#
# 三、 标签选择器
# 1> 选择元素
#
# 2> 获取名称
#
# 3> 获取属性
#
# 4> 获取内容
#
# 5> 嵌套选择
#
# 6> 子节点和子孙节点
# 1) soup.p.contents返回p标签的所有子节点
#
# 2) 利用 .children 返回该标签所有子节点的一个迭代器,再利用for循环和enumerate(soup.p.children)方法返回其所有子 # 节点及其索引(html源代码如上)
#
# 3) 利用.descendants以迭代器形式返回标签的所有子孙节点
#
# 7> 父节点和祖先节点
# 1) 利用.parent打印父节点
#
# 2) 利用.parents 打印所有祖先节点
#
# 8> 兄弟节点
#
#
# 四、 标准选择器
# 1> 基本形式:find_all(name, attrs, recursive, text, **kwargs)
# 可根据标签名、属性、内容查找文档,返回全部元素。
# 2> name(根据标签名查找文档)
#
#
#
# 3> attrs(根据属性查找标签)
# 1)以字典形式向 find_all() 传入参数
# 2)直接将属性本身当作参数传入find_all() ,class是特殊的关键字,需要以class_='xxx'传入
#
# 4> text(根据文本内容查找文档,但是用于元素匹配更加方便)
#
# 5> 【一些查找方法】
# 1) find(name, attrs, recursive, text, **kwargs)
#
# 2) find_parents() 返回所有祖先节点
# find_parent() 返回所有父节点
# 3)find_next_siblings() 返回后面所有兄弟节点
# find_next_sibling() 返回后面第一个兄弟节点
# 4) find_previous_siblings() 返回前面所有兄弟节点
# find_previous_sibling() 返回前面第一个兄弟节点
# 5) find_all_next() 返回节点后所有符合条件的节点
# find_next() 返回节点后符合条件的第一个节点
# 6)find_all_previous() 返回节点前符合条件的所有节点
# find_previous() 返回节点前符合条件的第一个节点
#
# 五、 CSS选择器
# 1> 基本使用: 通过select()直接传入CSS选择器即可完成选择
#
#
#
# 2> 获取属性
#
# 3> 获取内容
#
# 六、 总结
# 1、推荐使用lxml解析库,必要时使用html.parser
# 2、标签选择筛选功能弱但是速度快
# 3、建议使用find() 、find_all() 查询匹配单个结果或者多个结果
# 4、如果对CSS选择器熟悉建议使用select()
# 5、记住常用的获取属性和文本值的方法