主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Beautiful Soup

Beautiful Soup 教程

Beautiful Soup 首页
Beautiful Soup 概述
Beautiful Soup 网页抓取
Beautiful Soup 安装
Beautiful Soup 测试包
Beautiful Soup 对象类型
Beautiful Soup 检查数据源
Beautiful Soup 抓取 HTML 内容
Beautiful Soup 按标签导航
Beautiful Soup 按 ID 查找元素
Beautiful Soup 按类查找元素
Beautiful Soup 按属性查找元素
Beautiful Soup 寻找树
Beautiful Soup 修改树
Beautiful Soup 解析文档的某个部分
Beautiful Soup 找到一个元素的所有子项
Beautiful Soup 使用 CSS 选择器查找元素
Beautiful Soup 查找所有注释
Beautiful Soup 从 HTML 抓取列表
Beautiful Soup 从 HTML 中抓取段落
Beautiful Soup 从 HTML 中抓取链接
Beautiful Soup 获取所有 HTML 标签
Beautiful Soup 获取标签内的文本
Beautiful Soup 查找所有标题
Beautiful Soup 提取标题
Beautiful Soup 提取电子邮件地址
Beautiful Soup 嵌套标签
Beautiful Soup 解析HTML表格
Beautiful Soup 标签的层级结构
Beautiful Soup 搜索特定文本
Beautiful Soup 移除标签
Beautiful Soup 移除所有样式
Beautiful Soup 移除script标签
Beautiful Soup 移除空标签
Beautiful Soup 移除子元素
Beautiful Soup find()和find_all()比较
Beautiful Soup 指定解析器
Beautiful Soup 比较对象
Beautiful Soup 创建副本
Beautiful Soup Tag对象位置
Beautiful Soup 编码
Beautiful Soup 输出格式化
Beautiful Soup prettify()方法
Beautiful Soup NavigableString类
Beautiful Soup 象转换为字符串
Beautiful Soup HTML文档转文本
Beautiful Soup 解析XML文档
Beautiful Soup 错误处理
Beautiful Soup 故障排除
Beautiful Soup 移植旧代码

Beautiful Soup 函数参考

Beautiful Soup contents 属性
Beautiful Soup children 属性
Beautiful Soup string 属性
Beautiful Soup strings 属性
Beautiful Soup stripped_strings 属性
Beautiful Soup descendants 属性
Beautiful Soup parent 属性
Beautiful Soup parents 属性
Beautiful Soup next_sibling 属性
Beautiful Soup previous_sibling 属性
Beautiful Soup next_siblings 属性
Beautiful Soup previous_siblings 属性
Beautiful Soup next_element 属性
Beautiful Soup previous_element 属性
Beautiful Soup next_elements 属性
Beautiful Soup previous_elements 属性
Beautiful Soup find() 方法
Beautiful Soup find_all() 方法
Beautiful Soup find_parents() 方法
Beautiful Soup find_parent() 方法
Beautiful Soup find_next_siblings() 方法
Beautiful Soup find_next_sibling() 方法
Beautiful Soup find_previous_siblings() 方法
Beautiful Soup ind_previous_sibling() 方法
Beautiful Soup find_all_next() 方法
Beautiful Soup find_next() 方法
Beautiful Soup find_all_previous() 方法
Beautiful Soup find_previous() 方法
Beautiful Soup select() 方法
Beautiful Soup append() 方法
Beautiful Soup extend() 方法
Beautiful Soup NavigableString() 方法
Beautiful Soup new_tag() 方法
Beautiful Soup insert() 方法
Beautiful Soup insert_before() 方法
Beautiful Soup insert_after() 方法
Beautiful Soup clear() 方法
Beautiful Soup extract() 方法
Beautiful Soup ecompose() 方法
Beautiful Soup replace_with() 方法
Beautiful Soup wrap() 方法
Beautiful Soup unwrap() 方法
Beautiful Soup smooth() 方法
Beautiful Soup prettify() 方法
Beautiful Soup encode() 方法
Beautiful Soup decode() 方法
Beautiful Soup get_text() 方法
Beautiful Soup diagnose() 方法

教程

Beautiful Soup 首页
Beautiful Soup 概述
Beautiful Soup 网页抓取
Beautiful Soup 安装
Beautiful Soup 测试包
Beautiful Soup 对象类型
Beautiful Soup 检查数据源
Beautiful Soup 抓取 HTML 内容
Beautiful Soup 按标签导航
Beautiful Soup 按 ID 查找元素
Beautiful Soup 按类查找元素
Beautiful Soup 按属性查找元素
Beautiful Soup 寻找树
Beautiful Soup 修改树
Beautiful Soup 解析文档的某个部分
Beautiful Soup 找到一个元素的所有子项
Beautiful Soup 使用 CSS 选择器查找元素
Beautiful Soup 查找所有注释
Beautiful Soup 从 HTML 抓取列表
Beautiful Soup 从 HTML 中抓取段落
Beautiful Soup 从 HTML 中抓取链接
Beautiful Soup 获取所有 HTML 标签
Beautiful Soup 获取标签内的文本
Beautiful Soup 查找所有标题
Beautiful Soup 提取标题
Beautiful Soup 提取电子邮件地址
Beautiful Soup 嵌套标签
Beautiful Soup 解析HTML表格
Beautiful Soup 标签的层级结构
Beautiful Soup 搜索特定文本
Beautiful Soup 移除标签
Beautiful Soup 移除所有样式
Beautiful Soup 移除script标签
Beautiful Soup 移除空标签
Beautiful Soup 移除子元素
Beautiful Soup find()和find_all()比较
Beautiful Soup 指定解析器
Beautiful Soup 比较对象
Beautiful Soup 创建副本
Beautiful Soup Tag对象位置
Beautiful Soup 编码
Beautiful Soup 输出格式化
Beautiful Soup prettify()方法
Beautiful Soup NavigableString类
Beautiful Soup 象转换为字符串
Beautiful Soup HTML文档转文本
Beautiful Soup 解析XML文档
Beautiful Soup 错误处理
Beautiful Soup 故障排除
Beautiful Soup 移植旧代码

函数参考

Beautiful Soup contents 属性
Beautiful Soup children 属性
Beautiful Soup string 属性
Beautiful Soup strings 属性
Beautiful Soup stripped_strings 属性
Beautiful Soup descendants 属性
Beautiful Soup parent 属性
Beautiful Soup parents 属性
Beautiful Soup next_sibling 属性
Beautiful Soup previous_sibling 属性
Beautiful Soup next_siblings 属性
Beautiful Soup previous_siblings 属性
Beautiful Soup next_element 属性
Beautiful Soup previous_element 属性
Beautiful Soup next_elements 属性
Beautiful Soup previous_elements 属性
Beautiful Soup find() 方法
Beautiful Soup find_all() 方法
Beautiful Soup find_parents() 方法
Beautiful Soup find_parent() 方法
Beautiful Soup find_next_siblings() 方法
Beautiful Soup find_next_sibling() 方法
Beautiful Soup find_previous_siblings() 方法
Beautiful Soup ind_previous_sibling() 方法
Beautiful Soup find_all_next() 方法
Beautiful Soup find_next() 方法
Beautiful Soup find_all_previous() 方法
Beautiful Soup find_previous() 方法
Beautiful Soup select() 方法
Beautiful Soup append() 方法
Beautiful Soup extend() 方法
Beautiful Soup NavigableString() 方法
Beautiful Soup new_tag() 方法
Beautiful Soup insert() 方法
Beautiful Soup insert_before() 方法
Beautiful Soup insert_after() 方法
Beautiful Soup clear() 方法
Beautiful Soup extract() 方法
Beautiful Soup ecompose() 方法
Beautiful Soup replace_with() 方法
Beautiful Soup wrap() 方法
Beautiful Soup unwrap() 方法
Beautiful Soup smooth() 方法
Beautiful Soup prettify() 方法
Beautiful Soup encode() 方法
Beautiful Soup decode() 方法
Beautiful Soup get_text() 方法
Beautiful Soup diagnose() 方法

Beautiful Soup 使用 CSS 选择器查找元素


上一章 下一章

在 Beautiful Soup 库中,select() 方法是一个用于抓取 HTML/XML 文档的重要工具。类似于 find() 和其他 find_*() 方法,select() 方法也帮助定位满足给定条件的元素。然而,find*() 方法根据标签名及其属性搜索 PageElements,而 select() 方法根据给定的 CSS 选择器搜索文档树。

Beautiful Soup 还有一个 select_one() 方法。select() 和 select_one() 之间的区别在于 select() 返回一个包含所有属于 PageElement 并且由 CSS 选择器定义的元素的 ResultSet;而 select_one() 返回第一个满足基于 CSS 选择器选择标准的元素。

在 Beautiful Soup 版本 4.7 之前,select() 方法只支持常见的 CSS 选择器。到了版本 4.7,Beautiful Soup 整合了 Soup Sieve CSS 选择器库。结果,现在可以使用更多的选择器。在版本 4.12 中,除了现有的 select() 和 select_one() 方法外,还增加了一个 .css 属性。select() 方法的参数如下:

select(selector, limit, **kwargs)
  • selector - 包含一个 CSS 选择器的字符串。
  • limit - 找到这个数量的结果后停止查找。
  • kwargs - 要传递的关键字参数。

如果 limit 参数设置为 1,那么它等同于 select_one() 方法。虽然 select() 方法返回一个 Tag 对象的 ResultSet,但是 select_one() 方法返回一个单一的 Tag 对象。

Soup Sieve 库

Soup Sieve 是一个 CSS 选择器库。它已经整合到 Beautiful Soup 4 中,因此它会随着 Beautiful Soup 包一起安装。它提供了使用现代 CSS 选择器来选择、匹配和过滤文档树标签的能力。目前 Soup Sieve 实现了大部分从 CSS Level 1 规范到 CSS Level 4 的 CSS 选择器,除了那些尚未实现的选择器。

Soup Sieve 库有不同的类型的 CSS 选择器。基本的 CSS 选择器包括:

类型选择器

通过节点名称匹配元素。例如:

tags = soup.select('div')

通用选择器 (*)

它匹配任何类型的元素。例如:

tags = soup.select('*')

ID 选择器

根据元素的 id 属性进行匹配。符号 # 表示 ID 选择器。例如:

tags = soup.select("#nm")

示例

from bs4 import BeautifulSoup

html = '''
   <form>
      <input type = 'text' id = 'nm' name = 'name'>
      <input type = 'text' id = 'age' name = 'age'>
      <input type = 'text' id = 'marks' name = 'marks'>
   </form>
'''

soup = BeautifulSoup(html, 'html.parser')
obj = soup.select("#nm")
print(obj)

输出

[<input id="nm" name="name" type="text"/>]

类选择器

根据类属性中的值匹配元素。类名前缀的 . 符号是 CSS 类选择器。例如:

tags = soup.select(".submenu")

属性选择器

根据元素的属性进行匹配。

soup.select('[attr]')

示例

from bs4 import BeautifulSoup

html = '''
   <h1>Yoagoa Online Library</h1>
   <p><b>It's all Free</b></p>
   <a class="prog" href="https://www.yoagoa.com/java/java_overview.htm" id="link1">Java</a> 
   <a class="prog" href="https://www.yoagoa.com/cprogramming/index.htm" id="link2">C</a>
'''

soup = BeautifulSoup(html, 'html5lib')
print(soup.select('[href]'))

输出

[<a class="prog" href="https://www.yoagoa.com/java/java_overview.htm" id="link1">Java</a>, <a class="prog" href="https://www.yoagoa.com/cprogramming/index.htm" id="link2">C</a>]

拟类选择器

CSS 规范定义了许多拟 CSS 类。拟类是在选择器上添加的一个关键字,用于定义所选元素的一种特殊状态。它为现有元素增加了效果。例如,:link 选择了一个还没有被访问过的链接(每个带有 href 属性的 <a> 和 <area> 元素)。

拟类选择器 nth-of-type 和 nth-child 非常常用。

:nth-of-type()

选择器 :nth-of-type() 根据它们在一组兄弟元素中的位置匹配给定类型元素。关键词 even 和 odd 分别会选择从一组兄弟元素的子组中选择元素。

在下面的例子中,选择了第二个 <p> 类型的元素。

示例

from bs4 import BeautifulSoup

html = '''
<p id="0"></p>
<p id="1"></p>
<span id="2"></span>
<span id="3"></span>
'''

soup = BeautifulSoup(html, 'html5lib')
print(soup.select('p:nth-of-type(2)'))

输出

[<p id="1"></p>]

:nth-child()

这个选择器根据它们在一组兄弟元素中的位置来匹配元素。关键词 even 和 odd 分别会选择位置为偶数或奇数的元素。

用法:

:nth-child(even)
:nth-child(odd)
:nth-child(2)

示例

from bs4 import BeautifulSoup, NavigableString

markup = '''
   <div id="Languages">
      <p>Java</p> <p>Python</p> <p>C++</p>
   </div>
'''

soup = BeautifulSoup(markup, 'html.parser')
tag = soup.div

child = tag.select_one(':nth-child(2)')
print(child)

输出

<p>Python</p>
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图