易于上手的bs4,帮助开发者从复杂的网页结构中提取有价值的数据

先来看一段bs4的应用实例:

68482f41c6a795c21a98a64a98f072f7.jpeg

791915a039da0f82fafb878a5d4e381a.jpeg

结果输出如下:

40a452c43637d69697298cca28180b11.jpeg

代码逐行解释如下:

1. 首先,我们导入了`re`模块和`BeautifulSoup`类。

2. 然后,我们定义了一个包含多个链接的HTML文档字符串`html_doc`。

3. 接着,我们创建了一个BeautifulSoup对象`soup`,并将HTML文档传递给它进行解析。

4. 在`soup.find_all()`方法中,我们使用了正则表达式`re.compile(r'^https?://')`来匹配以"http://"或"https://"开头的链接。其中,`^`表示字符串的开头,`https?`表示"http"或"https",`://`表示冒号和两个斜杠。

5. `find_all()`方法返回一个包含所有符合条件的标签的列表。

6. 最后,我们遍历这个列表,并打印出每个链接的`href`属性值。

可以看到,只有以"http://"或"https://"开头的链接被成功提取出来。

对于bs4介绍:

Beautiful Soup 4是网络爬虫中常用的HTML/XML解析库,它能够帮助开发者从复杂的网页结构中提取有价值的数据。以下是具体介绍:

1. 初始化与文档解析:

   - 使用BeautifulSoup类将HTML或XML文档转换成一个Beautiful Soup对象,从而便于后续操作。

   - 在初始化Beautiful Soup对象时,需选择合适的解析器,如'html.parser'、'lxml'等,以优化解析过程并提高容错能力。

2. 标签查询与选择器:

   - 通过标签名直接查询单个标签或查询所有符合条件的标签。

   - 根据属性和属性值来查询单个或多个具有特定属性的标签。

   - 使用CSS选择器进行高级查询,能够更精确地定位到特定的标签集合。

3. 数据提取与异常处理:

   - 提取标签的文本内容,并对提取的文本进行处理,如去除空白字符、提取数字等。

   - 在进行标签查询和内容提取时,添加适当的异常处理机制,避免出现None引发的异常,确保代码的稳定性。

4. 编码选择与文件处理:

   - 在处理本地文件时注意指定正确的文件编码格式,如UTF-8,以避免乱码问题。

   - 使用prettify()等方法优化输出内容的可读性,便于调试和分析。

5. 属性操作与链接处理:

   - 获取和设置标签的属性,如获取链接标签的href属性来提取URL。

   - 利用Beautiful Soup的导航功能,如parent、next_sibling等,遍历文档树并定位到特定标签的上下文环境。

6. 自定义函数与模块化设计:

   - 针对常见的数据提取任务,编写自定义函数封装Beautiful Soup操作,提高代码复用性和可维护性。

   - 结合其他Python库,如Requests、Pandas等,实现数据的采集、清洗、分析一体化流程。

7. 性能优化与最佳实践:

   - 评估不同解析器的性能,根据应用场景选择最合适的解析器平衡解析速度和容错需求。

   - 遵循Beautiful Soup的官方文档和社区推荐的最佳实践,编写高效且可维护的爬虫代码。

8. 示例应用与实战演练:

   - 通过实际案例,如抓取网站标题、链接、图片等,加深对Beautiful Soup在爬虫中应用的理解。

   - 定期回顾和更新爬虫代码,适应目标网站可能的结构调整,确保爬虫程序的长期有效运行。

Beautiful Soup 4因其易用性和强大的文档处理能力,成为Python爬虫领域的重要工具。掌握Beautiful Soup 4的使用对于设计和开发高效稳定的网络爬虫至关重要。通过以上详细的介绍和实践指南,开发者可以更好地利用Beautiful Soup 4进行网页数据的爬取和处理,从而在数据分析和网络信息采集的任务中取得更好的成果。

正则表达式与bs4强强联手

正则表达式(原字符)

70a564aa5fae498739bb8bb59865b825.jpeg

正则表达式(字符集)

0a5bdff597cac4a50bf1838f21402318.jpeg

77e9b1e19a3009b61fc37e58773173a4.jpeg

以上的相关应用可以通过小蜜蜂AI的GPT问答获取更多的示例。网址:https://zglg.work。

(文章对你有用的话。记得点赞➕在看哦😯😯😯😯分享知识也是一种美德)

  如有学习上的困惑或问题欢迎评论区留言告诉我们,让我们一起解决共同进步:

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

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

相关文章

pytest配置文件配置并通过allure生成报告

之前已经学习了使用pytestrequests实现各种方式的调用和一些脚本的执行,今天来学习下如何使用pytest.ini配置文件来管理用例的执行以及如何使用allure生成测试报告。 1.pytest.ini文件配置 在项目目录下新建pytest.ini文件,然后进行配置,pyt…

MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)

目录 前言1. 授予权限2. 撤销权限3. 查询权限4. Demo 前言 公司内部的数据库权限一般针对不同人员有不同的权限分配,而不都统一给一个root权限 1. 授予权限 授予用户权限的基本命令是GRANT 可以授予的权限种类很多,涵盖从数据库和表级别到列和存储过…

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

使用adb通过wifi连接手机

1,手机打开开发者模式,打开无线调试 2,命令行使用adb命令配对: adb pair 192.168.0.102:40731 输入验证码:422859 3,连接设备: adb connect 192.168.0.102:36995 4,查看连接状态:…

Web后端开发(三层架构)

三层架构 controller :控制层,接收前端发送的请求,对请求进行处理,并响应数据。 service :业务逻辑层,处理具体的业务逻辑。 dao :数据访问层 (Data Access Object) (持久层&#xf…

AGP4+ 打包运行闪退,AGP7+ 正常(has code but is marked native or abstract)

问题 安装应用,点击图标启动立马闪退! 诡异的闪退:AGP4 打包运行闪退,AGP7 正常 unity 导出的 Android 日志两个主要点: com.android.boot.App 是 Android 的 application 子类,程序入口 java.lang.Class…

字符串的复杂操作(字符串的下标和切片、以及字符串的相关操作函数方法)

如果使用不符合标准的标识符,将会报错 SyntaxError: incalid syntax(无效语法) 文章目录 一、字符串的复杂操作1.1 下标(也叫索引)1.2 切片 一、字符串的复杂操作 1.1 下标(也叫索引) 下标代表着第几个数据,从0开始计…

IDEA 高效插件工具

文章目录 LombokMaven Helper 依赖冲突any-rule(正则表达式插件)快速生成javadocGsonFormat (Aits) 将json解析成类Diagrams使用 类图SequenceDiagram时序图GenerateAllSetter(AltEnter)大小写转写String ManipulationGitToolBox 代码提交人activate-pow…

Spring Boot集成tablesaw插件快速入门Demo

1 什么是tablesaw? Tablesaw是一款Java的数据可视化库,主要包括两部分: 数据解析库,主要用于加载数据,对数据进行操作(转化,过滤,汇总等),类比Python中的Pandas库; 数据…

Objective-C的初始化方法中,应该如何读写属性

除非有明确的原因需要使用setter, getter, 否则总是应该直接访问, 也就是直接使用实例变量(也称为 iVar)来读写数据 理由: 避免子类覆盖setter方法的影响:若在初始化方法中使用setter方法, 使用此方法实例化子类, 可能会调用子类…

即插即用!CVD:第一个生成具有相机控制的多视图一致视频方案!(斯坦福港中文)

论文链接:https://arxiv.org/abs/2405.17414 项目链接:https://collaborativevideodiffusion.github.io/ 最近对视频生成的研究取得了巨大进展,使得可以从文本提示或图像生成高质量的视频。在视频生成过程中添加控制是未来的重要目标&#x…

ARM32开发--IIC软实现

知不足而奋进 望远山而前行 目录 文章目录 前言 开发流程 GD32F4软件I2C初始化 GD32F4软件I2C引脚功能 写操作 读操作 总结 前言 在嵌入式系统开发中,软件实现的I2C通信协议扮演着至关重要的角色。本文将深入探讨如何在GD32F4系列微控制器上实现软件I2C功能…

.NET MAUI Sqlite程序应用-数据库配置(一)

项目名称:Ownership(权籍信息采集) 一、安装 NuGet 包 安装 sqlite-net-pcl 安装 SQLitePCLRawEx.bundle_green 二、创建多个表及相关字段 Models\OwnershipItem.cs using SQLite;namespace Ownership.Models {public class fa_rural_base//基础数据…

湖仓一体全面开启实时化时代

摘要:本文整理自阿里云开源大数据平台负责人王峰(莫问)老师在5月16日 Streaming Lakehouse Meetup Online 上的分享,主要介绍在新一代湖仓架构上如何进行实时化大数据分析。内容主要分为以下五个部分: Data Lake Dat…

java线程池讲解!核心参数

创建方式 | 构造方法 Executor构造方法 存放线程的容器&#xff1a; private final HashSet<Worker> workers new HashSet<Worker>(); 构造方法&#xff1a; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit uni…

vue页面和 iframe多页面无刷新方案和并行存在解决方案

面临问题 : back的后台以jsp嵌套iframe为主, 所以在前端框架要把iframe无刷新嵌套和vue页面进行并行使用,vue的keep-alive只能对虚拟dom树 vtree 进行缓存无法缓存iframe,所以要对iframe进行处理 tab标签的切换效果具体参考若依框架的tab切换,可以去若依看源码,若依源码没有实…

NodeClub:NodeJS构造开源交流社区

NodeClub&#xff1a; 连接每一个想法&#xff0c;NodeClub让社区更生动- 精选真开源&#xff0c;释放新价值。 概览 NodeClub是一个基于Node.js和MongoDB构建的社区系统&#xff0c;专为开发者和社区爱好者设计。它提供了一套完整的社区功能&#xff0c;包括用户管理、内容发…

进击算法工程师深度学习课程

"进击算法工程师深度学习课程"旨在培养学员在深度学习领域的专业技能和实战经验。课程涵盖深度学习基础理论、神经网络架构、模型优化方法等内容&#xff0c;通过项目实践和算法实现&#xff0c;帮助学员掌握深度学习算法原理和应用&#xff0c;提升在算法工程师领域…

在k8s中部署Elasticsearch高可用集群详细教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件&#xff0c;直接创建独特的道路网络。 添加额外辅助对象&#xff0c;让你的场景栩栩如生&#xff1a;桥梁、安全护栏、栅栏、墙壁…