Python爬虫bs4基本使用

一、bs4

1、bs4获得标记的子集或父集或兄弟节点

(1)子集:

通过contentschildren可以获得子集,前者获得的是字符串列表,后者获得的是一个列表迭代器对象,需要遍历获得内容

比如我们有以下代码和数据:

from bs4 import BeautifulSoup
html = """
<html><head><title>The Dormouse's story</title></head><body><p class="story">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" id="link1"><span>Elsie</span></a><a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>and they lived at the bottom of a well.</p><p class="story">...</p>
"""
soup = BeautifulSoup(html,'lxml')

对于上述代码说明请参考主页上一篇文章

案例:

我们要获得p标签的子集:

print(soup.p.contents)

输出:

['\n            Once upon a time there were three little sisters; and their names were\n            ', <a class="sister" href="http://example.com/elsie" id="link1">
<span>Elsie</span>
</a>, '\n', <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, ' \n            and\n    

 

 或:

soup.p.children

但是这种方法返回的是一个列表,我们需要对他进行迭代输出。示例:

children=soup.p.children
for i in children:print(i)

输出:

      Once upon a time there were three little sisters; and their names were<a class="sister" href="http://example.com/elsie" id="link1">
<span>Elsie</span>
</a><a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>and<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>and they lived at the bottom of a well.

(2)后代集

descendants获得后代集,返回的也是一个列表,操作与子集的children类似

案例:

for i,j in enumerate(soup.p.descendants):print(i,j)

(3)父集

parent,parents,前者获得a节点的父节点,获得一个直接父节点的全部内容。后者遍历所有父节点,返回一个列表。

parent案例

获得a节点的父节点:

print(soup.a.parent)

parents案例:

获得a节点的所有父节点:

soup.a.parents

 返回是一个列表,所以要对值操作也需要迭代,代码不再赘述。

(4)兄弟节点

next_sibling,previous_sibling。前者是获得下一个兄弟节点,后者是获得前一个兄弟节点。

next_siblings,previous_siblings。前者是获得当前节点的后面所有的兄弟节点,后者是获得当前节点的前面所有的兄弟节点,也是返回一个列表,操作值方式与上述迭代相同,代码不再赘述。

案例:

获取a标记的下一个兄弟节点

print(soup.a.next_sibling)

其他方法使用方法相同。

2、方法选择器

(1)方法

  1. find() 和 find_all()

    这两个方法都接受多个参数来指定搜索条件,比如标签名(name)、属性(attrs)、文本内容(string)等。

    • find(name=None, attrs={}, recursive=True, string=None, **kwargs):返回文档中符合条件的第一个元素。
    • find_all(name=None, attrs={}, recursive=True, string=None, limit=None, **kwargs):返回文档中所有符合条件的元素,并生成一个列表。
  2. find_parent() 和 find_parents()

    这两个方法用于向上遍历DOM树来查找父元素。

    • find_parent(name=None, attrs={}, string=None, limit=None, **kwargs):返回当前元素的第一个匹配父元素。
    • find_parents(name=None, attrs={}, string=None, limit=None, recursive=True, **kwargs):返回当前元素的所有匹配父元素,并生成一个列表。
  3. find_next() 和 find_next_siblings()

    这两个方法用于查找当前元素之后的元素。

    • find_next(name=None, attrs={}, string=None, **kwargs):返回文档中当前元素之后的第一个匹配元素。
    • find_next_siblings(name=None, attrs={}, string=None, limit=None, **kwargs):返回当前元素之后的所有匹配兄弟元素,并生成一个列表。
  4. find_previous() 和 find_previous_siblings()

    这两个方法用于查找当前元素之前的元素。

    • find_previous(name=None, attrs={}, string=None, **kwargs):返回文档中当前元素之前的第一个匹配元素。
    • find_previous_siblings(name=None, attrs={}, string=None, limit=None, **kwargs):返回当前元素之前的所有匹配兄弟元素,并生成一个列表。
  5. select()

    • select(selector, namespaces=None, limit=None, **kwargs):使用CSS选择器语法来查找元素,并返回一个列表。这是基于lxml的CSS选择器实现,提供了强大的选择能力。

(2)属性说明

find() 方法

  • name:字符串或正则表达式,用于指定要查找的标签名。如果传递的是字符串,则会在文档中查找所有该名称的标签;如果传递的是正则表达式,则会查找所有匹配该正则表达式的标签名。
  • attrs:字典,用于指定一个或多个属性及其值,作为查找条件。例如,attrs={"class": "header"} 会查找所有class属性值为"header"的元素。
  • recursive:布尔值,默认为True。如果为True,则Beautiful Soup会递归地通过文档的子孙节点来查找元素;如果为False,则只在当前节点的直接子节点中查找。
  • string:字符串或正则表达式,用于指定要查找的文本内容。如果传递的是字符串,则会在文档中查找所有包含该文本的元素;如果传递的是正则表达式,则会查找所有文本内容匹配该正则表达式的元素。
  • limit:这个参数实际上在find()方法中不常用,因为它主要用于find_all()方法,以限制返回元素的数量。但在某些版本的Beautiful Soup中,如果传递了limit参数给find(),它可能会被忽略,因为find()默认只返回第一个匹配的元素。
  • kwargs:可以接受其他关键字参数,这些参数会作为属性来查找元素。例如,id="link1" 可以直接作为 find(id="link1") 来调用。

find_all() 方法

  • nameattrsrecursivestring:这些参数的含义与find()方法相同,但find_all()会返回所有匹配的元素,而不是仅仅第一个。
  • limit:整数,用于限制返回元素的数量。如果文档中有超过limit个元素匹配给定的条件,则find_all()只会返回前limit个元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

Host 表示服务器主机的地址和端口号 URL 里面不是已经有 Host 了吗&#xff0c;为什么还要写一次&#xff1f; 这里的 Host 和 URL 中的 IP 地址、端口什么的&#xff0c;绝大部分情况下是一样的&#xff0c;少数情况下可能不同当前我们经过某个代理进行转发。过程中&#xf…

2024年项目经理不能错过的开源项目管理系统大盘点:全面指南

在2024年&#xff0c;随着项目管理领域的不断发展&#xff0c;开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统&#xff0c;帮助项目经理们找到最佳选择&#xff0c;不容错过。 在项目管理日益复杂的今天&#xff0c;开源项…

腾讯云点播及声音上传

文章目录 1、开通腾讯云点播2、获取腾讯云API密钥3、完成声音上传3.1、引入依赖3.2、参考&#xff1a;接入点地域3.3、参考&#xff1a;任务流设置3.4、首先修改配置&#xff1a;3.4.1、 3.5、TrackInfoApiController --》 uploadTrack()3.6、VodServiceImpl --》 uploadTrack(…

SOLIDWORKS Flow Simulation对几何模型都有哪些要求?

SOLIDWORKS Flow Simulation 是一款集设计与仿真于一体的流体仿真软件&#xff08;EFD&#xff0c;CFD&#xff09;&#xff0c;以其操作简便、建模快捷和快速收敛等优点&#xff0c;深受广大初学者的喜爱。 在模型建立方面&#xff0c;Flow Simulation 能够直接利用 SOLIDWOR…

项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/142454993 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

数据科学 - 字符文本处理

1. 字符串的基本操作 1.1 结构操作 1.1.1 拼接 • 字符串之间拼接 字符串之间的拼接使用进行字符串的拼接 a World b Hello print(b a) • 列表中的字符串拼接 将以分隔符‘,’为例子 str [apple,banana] print(,.join(str)); • 字符串中选择 通过索引进行切片操…

【网络安全】-访问控制-burp(1~6)

文章目录 前言   1.Lab: Unprotected admin functionality  2.Lab: Unprotected admin functionality with unpredictable URL   3.Lab: User role controlled by request parameter   4.Lab:User role can be modified in user profile  5.Lab: User ID controlled by…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网&#xff1a;FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录&#xff0c;在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

LLM - 使用 XTuner 指令微调 多模态大语言模型(InternVL2) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142528967 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 XTuner…

Spark-RDD持久化

一、Spark的三种持久化机制 1、cache 它是persist的一种简化方式&#xff0c;作用是将RDD缓存到内存中&#xff0c;以便后续快速访问&#xff0c;提高计算效率。cache操作是懒执行的&#xff0c;即执行action算子时才会触发。 2、persist 它提供了不同的存储级别&#xff0…

关于神经网络的一个介绍

这篇文章中&#xff0c;我将简单介绍下与神经网络有关的东西&#xff0c;包括它的基本模型&#xff0c;典型的算法以及与深度学习的联系等内容。 一、神经元 神经网络是由许多个神经元组成的&#xff0c;在生物的神经网络中&#xff0c;就是神经元间相互连接&#xff0c;传递…

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序&#xff0c;所以摸索了一种 Ubuntu 系统下开机自启动的方法&#xff0c;开机自启动 .sh 脚本&#xff0c;加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

Leetcode - 周赛416

目录 一&#xff0c;3295. 举报垃圾信息 二&#xff0c;3296. 移山所需的最少秒数 三&#xff0c;3297. 统计重新排列后包含另一个字符串的子字符串数目 I 四&#xff0c;3298. 统计重新排列后包含另一个字符串的子字符串数目 II 一&#xff0c;3295. 举报垃圾信息 本题就是…

Linux 安装nginx

下载安装 https://nginx.org/en/download.html 解压 tar -zxvf nginx-1.26.2.tar.gz -C /opt chmod 777 -R /opt/nginx-1.26.2/编译 && 安装 # 安装到同目录以免乱套&#xff0c;一定要先创建目录 mkdir /opt/nginx-1.26.2/nginx/# 编译 make # 安装&#xff0c;大…

将Mixamo的模型和动画导入UE5

首先进入Mixamo的官网 , 点击 Character 选择一个模型 (当然你也可以自己上传模型/绑定动画) 然后点击下载 , 这个作为带骨骼的模型 选择FBX格式 , T Pose 直接下载 点击 Animations 选择动画 , 搜索 idle 默认站立动画 点击下载 , 格式选择 FBX , 不带模型只要骨骼 , 帧数选6…

MySQL_表_进阶(2/2)

上一章我们谈了排序子句&#xff0c;使用ORDER BY 字段 DESC/ASC。以及左右连接的多关系查询。 今天&#xff0c;没错&#xff0c;四张表最后两个需求 ✨涉及聚合函数查询与指定别名 四张表&#xff1a; 学院表&#xff1a;(testdb.dept) 课程表&#xff1a;(testdb.course) 选…

Rust编程的if选择语句

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 Rust语言实现选择结构时&#xff0c;根据某种条件的成立与否而采用不同的程序段进行…

基于nodejs+vue的农产品销售管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

FortiGate 无线组网

无线管理与配置 FortiAP 连接 internal 接口之后自动获得 ip 地址&#xff1a;192.168.1.xxx/24在 FortiGate 中创建 SSIDFortiGate 自动发现 FortiAP&#xff0c;将 FortiAP 添加到 FortiGate将 SSID 和 FortiAP 关联创建防火墙策略 下面我们就来一起看看在 FortiGate 中该如…