DataWhale-零基础络网爬虫技术(二er数据的解析与提取)

课程链接先给各位  ↓↓↓ (点击即可食用.QAQ

Datawhale-学用 AI,从此开始


一、数据的解析与提取

数据提取的几种方式:

  • re解析
  • bs4解析
  • xpath解析

1.1正则表达式(Reuglar Experssion)

RE是一种用于字符串匹配的规则描述方式。它通过特定的组合字符来定义字符串的模式,从而实现对字符串的搜索、匹配、替换等操作。Python也支持同样re的用法,需要引入模块import re。

使用场景

  • 用于简单的文本提取,尤其是当目标内容有明确的模式,我们平常搜个作文或者材料的文字内容;

  • 用于快速验证字符串格式,这个写过web的朋友都知道,需要登录验证,还可以进行高亮提示,用Ajax刷新;

  • 对于结构简单的HTML或文本内容,可以快速提取特定信息,用于快速抽取想要爬取的目标数据格式。

优点

  • 高效:正则表达式在处理简单模式匹配时速度快;

  • 灵活:可以通过复杂的正则表达式匹配几乎任何文本模式,当然加密的内容需要另说;

  • 简单:不需要额外的第三方库,使用原生Python自带re模块即可完成。

缺点

  • 复杂:对于杂复的HTML、XML文档,正则表达式很容易失,尤其是密加文档,密解需要

  • 出易错:HTML、XML嵌套场景结构,在使用时正则表达式无法准确匹配。

  • 性能不稳定:复杂的正则表达式在处理大型文本时可能会导致性能问题。

1.2BeautifulSoup解析(bs4

Bs4是一个用于解析HTML、XML文档的Python库。它提供了一种简单而直观的方式来查找、提取和操作HTML、XML中的标签和内容。BeautifulSoup通常与requests库结合使用,用于抓取网页内容并解析。

使用场景

  • 用于解析文档,尤其是需要提取标签内容、属性的时候,直接一整个提出来;

  • 处理结构复杂的网页内容,这里的复杂指的是嵌套复杂,加密还需要单独解答;

  • 用于数据爬取、网页内容提取等一般情况下;

优点

  • 简单上手使用:API非常之多,网上的案例也是很多,大家易于学习和使用;

  • 兼容性好:可以结合多种解析器如html.parserlxmlhtml5lib等配合使用;

  • 容错相比较高:能够处理不规范的HTML文档。

缺点

  • 性能不稳定:对于非常大的HTML文档,bs4反应慢;

  • 需要额外安装库:需要安装额外beautifulsoup4和解析器

1.3 XPath(XML Path Language)解析

XPath是一种在XML和HTML文档中查找信息的语言。它使用路径表达式来选定文档中的节点或节点集,XPath是W3C标准,广泛应用于文档的解析,在Python中添加lxml库可食用

使用场景

  • 用于需要精确查找HTML、XML文档中的节点或节点集;

  • 处理结构复杂的文档,尤其是需要根据多种条件(如标签名、属性、文本内容等)进行精确匹配时常用于

  • 本节课中的数据爬取、自动化测试等场景;

优点

  • 精确性高:可以通过复杂的路径表达式精确查找节点;

  • 性能好lxml库的XPath解析器通常比BeautifulSoup更快;

  • 兼容性高:支持节点选择、属性选择、文本选择等

缺点

  • 语法难:XPath语法相对复杂,需要一定的学习成本;

  • 需要额外安装库:需要安装lxml库

二、群内的问题

在BeautifulSoup模块中 find()和find_all()的区别?

共同点:都可以用于解析 HTML 、 XML 文档查找特定的标签或内容;
不同点:find找文档的第一个匹配内容,如果没找到就返回none,所以只找一个find快;find_all找所有的匹配内容,全部没有就返回空,适合匹配内容多的场景。
在使用方法上:

from bs4 import BeautifulSoup
<html><head><title>Test Page</title></head><body><p class="title">Hello, world!</p >nbnb</body>
</html>
soup = BeautifulSoup(html_doc, 'html.parser')# 使用 find()查找第一个匹配的标签
first_p = soup.find('p')
print("First <p> tag:", first_p)
## First <p> tag: <p class="title">Hello, world!</p >
# 使用 find_all()查找所有匹配的标签。,
all_a = soup.find_all('a')
print("All <a> tags:", all_a)
## All <a> tags: [ nb,nb]

三、总结

正则表达式(re:用于简单的文本提取和验证,但不适合复杂的HTML或XML解析,在网上搜作文写作材料等等之类的可以使用re,包括写web登录页面后端数据核验的时候,也可以加上re的判断,后期将为安全性能提供保障。

BeautifulSoup(bs4:用于解析HTML、XML文档,尤其是需要提取标签内容或属性时,就可以用bs4,但是同样是找标签属性没有人家xpath跑的快,所以结合实际情况选择进行

XPath:用于精确查找HTML、XML文档中的节点,性能较好,就是语法有些难,对刚入门的新手不太友好,学到半截有可能就劝退放弃了,理性选择

在实际使用场景中,可以根据业务的相关需求选择合适的解析方式

如果只是提取简单的文本信息搜搜作文、思想汇报这类型的,可以使用正则表达式,如果需要解析HTML、XML文档并提取标签内容,可以使用BeautifulSoup、xpath,一些精确查找节点并处理复杂文档,就选XPath。。。。

为了反机器爬取,我将本文中许多语序和词语行进调整了,正常人工查看是阅读毫无碍障的,机器爬取则会产生一些困难,同时html及一些练习就不提到单独了,请大家操作也在隔离安全的环境下操作,学习首先也要保护好自己,需要注意的点是,Python原生的镜像下载库比较慢,可以更换源后进行下载,这里马老师也写了清华的下载源,请大家参考。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

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

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

相关文章

Gin框架与Apifox

第一部分&#xff1a;技术栈概述 1. Go语言简介 Go&#xff08;又称Golang&#xff09;是Google开发的一门静态类型、编译型编程语言&#xff0c;具有以下特点&#xff1a; 高性能&#xff1a;编译为机器码&#xff0c;执行效率接近C/C 简洁语法&#xff1a;没有复杂的OOP概…

Docker 容器技术入门与环境部署

一、Docker 技术概述与核心概念解析 &#xff08;一&#xff09;Docker 技术本质与定位 Docker 是当前主流的操作系统级容器虚拟化技术&#xff0c;其核心价值在于通过轻量化隔离机制解决开发、测试与生产环境的一致性问题。与传统虚拟机&#xff08;如 VMware&#xff09;相…

π0源码(openpi)剖析——从π0模型架构的实现:如何基于PaLI-Gemma和扩散策略去噪生成动作,到基于C/S架构下的模型训练与部署

前言 ChatGPT出来后的两年多&#xff0c;也是我疯狂写博的两年多(年初deepseek更引爆了下)&#xff0c;比如从创业起步时的15年到后来22年之间 每年2-6篇的&#xff0c;干到了23年30篇、24年65篇、25年前两月18篇&#xff0c;成了我在大模型和具身的原始技术积累 如今一转眼已…

Vui:轻量级语音对话模型整合包,让交互更自然

Vui&#xff1a;轻量级语音对话模型&#xff0c;让交互更自然 &#x1f5e3;️✨ Vui 是 Fluxions-AI 团队推出的一款开源轻量级语音对话模型&#xff0c;其核心架构基于 LLaMA。这款模型经过了长达 4 万小时的真实对话数据训练&#xff0c;能够逼真地模拟人类对话中的语气词、…

【STL】深入理解 string 的底层思想

一、STL的定义 STL是C标准库的一部分它不仅是一个可复用的组件库还是一个包含数据结构和算法的软件框架。 二、STL的历史和版本 原始版本&#xff1a; Alexander Stepanov、Meng Lee在惠普实验室完成的原始版本&#xff0c;本着开源精神&#xff0c;他们声明允许任何人任意运…

深入剖析Linux epoll模型:从LT/ET模式到EPOLLONESHOT的实战指南

一、epoll&#xff1a;高性能I/O复用的核心引擎 epoll是Linux内核2.6引入的高效I/O多路复用机制&#xff0c;专为解决C10K问题而生。相比select/poll&#xff0c;epoll在连接数激增时性能优势显著&#xff1a; // 创建epoll实例 int epollfd epoll_create1(0);// 事件注册 s…

网络安全之某cms的漏洞分析

漏洞描述 该漏洞源于Appcenter.php存在限制&#xff0c;但攻击者仍然可以通过绕过这些限制并以某种方式编写代码&#xff0c;使得经过身份验证的攻击者可以利用该漏洞执行任意命令 漏洞分析 绕过编辑模板限制&#xff0c;从而实现RCE 这里可以修改模板文件&#xff0c;但是不…

Nginx-前端跨域解决方案!

1 Nginx 核心 Nginx 是一个开源的高性能 HTTP 和反向代理服务器&#xff0c;以轻量级、高并发处理能力和低资源消耗著称。除作为 Web 服务器外&#xff0c;还可充当邮件代理服务器和通用的 TCP/UDP 代理服务器&#xff0c;广泛应用于现代 Web 架构中。 在 Windows 系统中使用…

RedisVL 入门构建高效的 AI 向量搜索应用

一、前置条件 在开始之前&#xff0c;请确保&#xff1a; 已在 Python 环境中安装 redisvl。运行 Redis Stack 或 Redis Cloud 实例。 二、定义索引架构&#xff08;IndexSchema&#xff09; 索引架构&#xff08;IndexSchema&#xff09;用于定义 Redis 的索引配置和字段信…

基于ssm移动学习平台微信小程序源码数据库文档

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

【Python】Tkinter模块(巨详细)

专栏文章索引:Python 有问题可私聊:QQ:3375119339 本文内容系本人根据阅读的《Python GUI设计tkinter从入门到实践》所得,以自己的方式进行总结和表达。未经授权,禁止在任何平台上以任何形式复制或发布原始书籍的内容。如有侵权,请联系我删除。 目录 一、Tkinter与GUI …

【C++特殊工具与技术】局部类

在 C 的类体系中&#xff0c;除了全局类、嵌套类&#xff08;在类内部定义的类&#xff09;&#xff0c;还有一种特殊的存在 ——局部类&#xff08;Local Class&#xff09;。它像函数内部的 “封闭王国”&#xff0c;作用域严格限制在所属函数内&#xff0c;既拥有类的封装特…

《C#图解教程 第5版》深度推荐

《C#图解教程 第5版》深度推荐 在 C# 编程语言的浩瀚学习资源中&#xff0c;《C#图解教程 第5版》宛如一座灯塔&#xff0c;为开发者照亮前行之路。通过其详实的目录&#xff0c;我们能清晰窥见这本书在知识架构、学习引导上的匠心独运&#xff0c;无论是编程新手还是进阶开发者…

【Kubernetes】配置自定义的 kube-scheduler 调度规则

在最近一次 K8s 环境的维护中&#xff0c;发现多个 Pod 使用相同镜像时&#xff0c;调度到固定节点的问题导致集群节点资源分配不均的情况。 启用调度器的打分日志后发现这一现象是由 ImageLocality 打分策略所引起的&#xff08;所有的节点中&#xff0c;只有一个节点有运行该…

跟着AI学习C# Day21

&#x1f4c5; Day 21&#xff1a;动态类型与动态语言运行时&#xff08;Dynamic Types & DLR&#xff09; ✅ 学习目标&#xff1a; 理解什么是 dynamic 类型&#xff1b;掌握 dynamic 与 object 的区别&#xff1b;理解 DLR&#xff08;Dynamic Language Runtime&#…

leetcode-3085.成为K字符串需要删除的最小字符串数

题目描述 解题思路 这题不难想到需要统计每个字母的出现频率&#xff0c;一共有26个字母&#xff0c;故cnt数组有26维。我们可以枚举其中一种作为「删除操作结束后出现频率最低的字符」&#xff0c;将其设置为 c&#xff0c;那么所有频率小于 c 的字符都会被删除&#xff0c;所…

Android 中 解析 XML 文件的几种方式

在 Android 开发中,解析 XML 文件有多种方式,每种方式都有其特点和适用场景。常见的 XML 解析方式有 DOM 解析、SAX 解析 和 XmlPullParser 解析。 一、xml 文件及数据类 1、xml 文件 将测试用 book.xml 文件放在项目的 app/src/main/assets 目录下,文件内容如下:<lib…

python里的abc库是什么东西

Python 中的 ABC&#xff1a;为什么你需要抽象基类&#xff1f;告别“假鸭子”&#xff0c;拥抱真抽象&#xff01; 你是不是经常在 Python 项目中感到困惑&#xff1a;我定义了一个类&#xff0c;希望它能被其他类继承并实现某些特定功能&#xff0c;但又不想它被直接实例化&…

设计模式精讲 Day 9:装饰器模式(Decorator Pattern)

【设计模式精讲 Day 9】装饰器模式&#xff08;Decorator Pattern&#xff09; 文章内容 在软件开发中&#xff0c;灵活扩展功能是提升系统可维护性和可复用性的关键。装饰器模式作为一种结构型设计模式&#xff0c;为对象动态地添加职责&#xff0c;而无需通过继承来实现。它…

浏览器无法访问:Nginx下的基于域名的虚拟主机

检查步骤如下&#xff1a; 1、nginx -t &#xff0c;检查配置文件是否有语法错误 [root89 ~]# nginx -t nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok nginx: configuration file /opt/nginx/conf/nginx.conf test is successful # 可以看到 配置…