当前位置: 首页 > news >正文

爬虫技术之正则提取静态页面数据

第一天

简单示例

在爬虫过程中,我们获取到了页面之后,通常需要做的就是解析数据,将数据持久化到数据库为我所用。如何又快又准确得提取有效数据?这是一门技术,看了我的博客之前可能略有难度,但各位大师看了我的博客之后,那只能说解析页面就像砍瓜切菜,喝水吃饭一般简单。

废话不说,直接搞示例,请看下面这个页面源码:

<tr><th>性別:</th><td>男</td></tr><tr>

来来来,写个python代码提取性别?
分析一下,这不就是td标签内的数据嘛?写一个正则,提取<td>男</td> 中间的中文。
正则得这么写,开头是<td>中间是要提取的内容,使用()括起来,不管中间是啥,()内就写.*?
最后以</td>结尾,想法是可以搞定的,上代码试试。
看代码:

# coding=utf-8import re
html_string = '''<tr><th>性別:</th><td>男</td></tr><tr>'''
regex = r'<td>(.*?)</td>'result = re.findall(regex,html_string)
print(result)

这个代码跑起来看看是牛还是马喽==>
在这里插入图片描述
果然是牛,🐂🐂🐂!
是不是感觉自己又行了,就是这么简单,后面慢慢试试复杂点页面,但都是解析方法从这个代码升级的,就是白开水,一眼望到底呀!

今天懒得写了,我得去钓鱼了。已经空军16天,今天必须破龟,明天来继续搞代码。

第二天

贪婪与非贪婪模式

空军回来,又是新的一天,我们继续搞!
这里我们需要了解两种正则的匹配模式【贪婪模式鱼非贪婪模式】,主要掌握非贪婪模式,就能搞定市面上大部分页面解析需求,666!
看一眼贪婪模式,虽然不常用,但可能哪个面试狗(我从来不把面试官当人,因为我遇到的都很狗,🐕🐕🐕)问,傻冒!

贪婪模式尽可能多地匹配所指定的字符。
在正则表达式中,默认情况下,大多数重复字符都是贪婪的,即它们尝试尽可能多次地匹配。
例如,.*将匹配尽可能长的字符串,即匹配到整个字符串,而不是仅仅匹配到第一个出现的子字符串。

以下熟读并背诵,这个很重要!!!

非贪婪模式尽可能少地匹配所指定的字符。
非贪婪模式通常通过在重复字符后面加上一个?来实现。
例如,.*?将匹配尽可能短的字符串,即匹配到第一个出现的子字符串。

我来找个字符串,搞个代码理解理解,不然说得太干!
字符串 “foobazquux”,我们想匹配两个尖括号< >之间的内容:
上代码瞧瞧:

# coding=utf-8import re# 原始字符串
text = "foo<bar>baz<qux>quux"# 贪婪模式
greedy_pattern = re.compile(r'<.*>')
# 创建了一个正则表达式对象,使用了贪婪模式,模式是 <.*>,表示匹配尖括号<和>之间的任意字符(包括零个字符或多个字符)。
greedy_match = greedy_pattern.search(text)
# 使用 search() 方法在给定的文本字符串 text 中搜索与正则表达式 greedy_pattern 匹配的第一个子串。
print("贪婪模式匹配结果:", greedy_match.group())
# 使用 group() 方法返回与正则表达式模式匹配的文本。# 非贪婪模式
non_greedy_pattern = re.compile(r'<.*?>')
non_greedy_match = non_greedy_pattern.search(text)
print("非贪婪模式匹配结果:", non_greedy_match.group())

看看代码的运行结果,是牛还是马。
在这里插入图片描述
小小牛马,简单简单。

了解了贪婪模式与非贪婪模式,我们基本上就可以搞定大部分的网页解析了,念在是初学者,又名菜鸡,还是多搞点案例来给大家修炼一下,顺便给大家一个匹配代码模板,以后只需要修改正则表达式即可,看完请说我牛b🐂🐂🐂

练习一

打开链接点我
,将电影名称,上映时间,评分采集并保存。
主要采集这三个数据
在这里插入图片描述
我们先来搞定标题的正则采集,标题长在这个里面,结果就下面这个b样
在这里插入图片描述

相关文章:

爬虫技术之正则提取静态页面数据

第一天 简单示例 在爬虫过程中&#xff0c;我们获取到了页面之后&#xff0c;通常需要做的就是解析数据&#xff0c;将数据持久化到数据库为我所用。如何又快又准确得提取有效数据&#xff1f;这是一门技术&#xff0c;看了我的博客之前可能略有难度&#xff0c;但各位大师看…...

字符串匹配算法:暴力匹配、KMP 算法、Boyer-Moore 算法、Rabin-Karp 算法

字符串匹配算法 字符串匹配算法是在一个字符串&#xff08;称为文本&#xff09;中查找另一个字符串&#xff08;称为模式&#xff09;出现的位置或者是否存在的算法。常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法和Rabin-Karp算法。下面是对这些算法的简要介…...

微信小程序接入百度地图(微信小程序插件)使用文档

第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…...

如果需要在Log4j中记录特定的异常信息,应该如何实现?如何动态地更改Log4j的日志级别?

如果需要在Log4j中记录特定的异常信息&#xff0c;应该如何实现&#xff1f; 在Log4j中记录特定的异常信息&#xff0c;你可以使用Logger类的error、warn、info等方法&#xff0c;这些方法通常接受一个字符串消息和一个Throwable对象&#xff08;如异常&#xff09;作为参数。下…...

Rust入门:C++和Rust动态库(dll)的相互调用

无论是C调用Rust动态库还是Rust调用C动态库&#xff0c;其操作基本都是一样地简单&#xff0c;基本和C调用C的动态库没什么区别&#xff0c;只需要列出所需要导入的函数&#xff0c;并链接到相应的lib文件即可。 这里&#xff0c;在windows中&#xff0c;我们以dll动态库为例说…...

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…...

3.11笔记2

目前使用的格里高利历闰年的规则如下&#xff1a; 公元年分非4的倍数&#xff0c;为平年。公元年分为4的倍数但非100的倍数&#xff0c;为闰年。公元年分为100的倍数但非400的倍数&#xff0c;为平年。公元年分为400的倍数为闰年。 请用一个表达式 (不能添加括号) 判断某一年…...

web服务器基础

目录 web服务器简介 (1)什么是www (2)网址及HTTP简介 (3)http协议请求的工作流程 主配置文件内的参数 目录标签 缺点 虚拟主机vhosts 示例的格式如下 实例 多IP实现多网页 修改监听端口号 hosts文件及域名解析 修改hosts文件内缓存格式 实现效果 实现多域名解析IP地址 在linux…...

矢量图片转换软件Vector Magic mac中文版功能特色

Vector Magic mac中文版是一款非常流行的矢量图片转换软件&#xff0c;它的功能特色主要体现在以下几个方面&#xff1a; 首先&#xff0c;Vector Magic mac中文版拥有出色的矢量转换能力。它采用世界上最好的全彩色自动描摹器&#xff0c;能够将JPG、PNG、BMP和GIF等位图图像…...

Window部署Oracle并实现公网环境远程访问本地数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…...

灵魂指针,教给(三)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 一、 字符指针变量 二、数组指针变量 2.1 数组指针变量是什么 2.2 数组指针变量如何初始化 三、二维数组传参本质 四、函数…...

纯手工搭建一个springboot maven项目

前言&#xff1a;idea社区版无法自动搭建项目&#xff0c;手动搭建的经验分享如下&#xff1a; 1 包结构 参考下图&#xff1a; 2 项目结构 3 maven依赖 具体的项目包结构如下图&#xff1a; 依据这个项目包结构配置一个springboot 的 pom依赖&#xff1a; <?xml ve…...

【Java】使用`LinkedList`类来实现一个队列,并通过继承`AbstractQueue`或者实现`Queue`接口来实现自定义队列

使用LinkedList类来实现一个队列&#xff0c;并通过继承AbstractQueue或者实现Queue接口来实现自定义队列。 以下是一个简单的示例&#xff0c;其中队列的大小与另一个List的容量保持一致&#xff1a; import java.util.LinkedList; import java.util.List; import java.util…...

ChatGPT消息发不出去了?我找到解决方案了

现象 今天忽然发现 ChatGPT无法发送消息&#xff0c;能查看历史对话&#xff0c;但是无法发送消息。 猜测原因 出现这个问题的各位&#xff0c;应该都是点击登录后顶部弹窗邀请[加入多语言 alapha 测试]了&#xff0c;并且语言选择了中文&#xff0c;抓包看到ab.chatgpt.com…...

《量子计算:下一个大风口,还是一个热炒概念?》

引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…...

在Ubuntu中如何基于conda安装jupyterlab

在Ubuntu中如何创建ipykernel 可以用下面命令完成 conda create -n newenv python3.8conda activate enwenvconda install ipykernel5.1.4conda install ipython_genutilsipython -m ipykernel install --user --namepython3 --display-name Python3conda install -c conda-fo…...

Unity 中的 PlayFab 入门

要开始在 Unity 中使用 PlayFab,你只需执行以下两个简单步骤即可。第一步是设置 PlayFab 帐户。第二步是通过安装 Unity 编辑器扩展将其连接到 Unity。或者,你也可以下载 PlayFab SDK 并在没有扩展的情况下进行配置。 设置你的 PlayFab 帐户 访问 PlayFab 的网站并创建你的…...

常见排序算法(C++)

评判一个排序算法时除了时间复杂度和空间复杂度之外还要考虑对cache的捕获效果如何&#xff0c;cache友好的排序算法应该对数据的访问相对集中&#xff0c;快速排序相较于堆排序优点就是在于对cache的捕获效果好。 堆排序 时间复杂度&#xff1a;O&#xff08;n log n &#xf…...

多线程编程互斥锁mutex的创建

在Linux下的多线程编程中&#xff0c;互斥锁&#xff08;mutex&#xff09;的创建主要有两种方式&#xff1a;静态分配和动态分配。这两种方式的主要区别在于互斥锁的生命周期和初始化方式。 静态分配&#xff08;静态方式&#xff09; 静态分配方式是在程序编译时就已经确定互…...

在 SpringBoot3 中使用 Mybatis-Plus 报错

在 SpringBoot3 中使用 Mybatis-Plus 报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are requiredat org.springframework.util.Assert.no…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...