正则表达式

正则表达式(Regular Expression),⼀种使⽤表达式的⽅式对字符串进⾏匹配的语法规则。

正则的语法:使⽤元字符进⾏排列组合来匹配字符串。

在线测试正则表达式:在线正则表达式测试OSCHINA.NET在线工具,ostools为开发设计人员提供在线工具,提供jsbin在线 CSS、JS 调试,在线 Java API文档,在线 PHP API文档,在线 Node.js API文档,Less CSS编译器,MarkDown编译器等其他在线工具https://tool.oschina.net/regex/

元字符:具有固定含义的特殊符号。

.*? 表示尽可能少的匹配,.*表示尽可能多的匹配。

Re模块

案例1、手刃豆瓣TOP250电影信息

import requests
import re
import csv
import time
import random# 设置请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ""AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/114.0.0.0 Safari/537.36","Referer": "https://movie.douban.com/top250"
}# 定义正则表达式
pattern = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?'r'<br>\s*(?P<year>\d{4}).*?'r'<span class="rating_num"[^>]*>(?P<score>\d+\.\d+)</span>.*?'r'<span>(?P<num>[\d,]+)人评价</span>',re.S
)# 创建 CSV 文件并写入表头
with open("douban_top250.csv", mode="w", newline="", encoding="utf-8-sig") as f:csvwriter = csv.writer(f)csvwriter.writerow(["电影名称", "上映年份", "评分", "评分人数"])# 抓取10页(每页25部电影)for start in range(0, 250, 25):url = f"https://movie.douban.com/top250?start={start}"print(f"正在抓取第 {start//25 + 1} 页:{url}")try:resp = requests.get(url, headers=headers, timeout=10)resp.encoding = resp.apparent_encodinghtml = resp.text# 保存页面用于调试(可选)with open(f"page_debug_{start}.html", "w", encoding="utf-8") as f_debug:f_debug.write(html)matches = list(pattern.finditer(html))print(f"✅ 第 {start//25 + 1} 页成功,匹配到 {len(matches)} 条")for m in matches:name = m.group("name").strip()year = m.group("year").strip()score = m.group("score").strip()num = m.group("num").replace(",", "").strip()csvwriter.writerow([name, year, score, num])# 加延时防止被反爬time.sleep(random.uniform(1, 2))except Exception as e:print(f"❌ 抓取失败:{e}")print("🎉 所有页面抓取完毕,已保存到 douban_top250.csv")

结果:

案例2、Quotes to Scrape 爬此网站

import re
import requestsdef scrape_quotes():url = "http://quotes.toscrape.com/"response = requests.get(url)if response.status_code != 200:print("Failed to fetch page")returnhtml = response.text# 正则匹配所有名言区块quotes_pattern = re.compile(r'<div class="quote".*?>(.*?)</div>', re.DOTALL)quotes = quotes_pattern.findall(html)results = []for quote in quotes:# 提取名言文本text_match = re.search(r'<span class="text".*?>(.*?)</span>', quote)text = text_match.group(1).strip() if text_match else "N/A"# 提取作者author_match = re.search(r'<small class="author".*?>(.*?)</small>', quote)author = author_match.group(1).strip() if author_match else "N/A"# 提取标签tags = re.findall(r'<a class="tag".*?>(.*?)</a>', quote)results.append({"text": text,"author": author,"tags": tags})# 打印结果for i, result in enumerate(results, 1):print(f"Quote {i}:")print(f"  Text: {result['text']}")print(f"  Author: {result['author']}")print(f"  Tags: {', '.join(result['tags'])}\n")if __name__ == "__main__":scrape_quotes()

结果显示:

 bs4模块

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

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

相关文章

详解Redis的集群模式(主从复制、哨兵与Cluster)

一、主从复制 (Master-Slave Replication) 1. 基本概念 主从复制是Redis最简单的集群模式&#xff0c;由一个主节点(Master)和一个或多个从节点(Slave)组成。 2. 工作原理 数据同步&#xff1a;从节点启动时会向主节点发送SYNC命令&#xff0c;主节点执行BGSAVE生成RDB文件并…

如何使用 Airtest 对 Flutter 和 Unity 应用进行UI自动化测试

使用 Airtest 进行 Flutter/Unity UI 自动化测试终极指南 一、 核心原理&#xff1a;为什么 Airtest 能行&#xff1f; 要理解如何用&#xff0c;先要明白其原理。Airtest 采取了“两条腿走路”的策略&#xff0c;这正是它能通吃各种UI技术的关键。 第一条腿&#xff1a;基于…

河马剧场多部自制剧霸榜,短剧精品化战略持续推进

临近暑期&#xff0c;短剧市场热度逐渐攀升。近期&#xff0c;DataEye发布6月9日—6月15日微短剧热力榜显示河马剧场以8部作品占据TOP30近三分之一席位&#xff0c;前三名中更是占据2个席位&#xff0c;以题材多元化、用户覆盖广、数据爆发力强的特点引领行业风向。其中&#x…

幂级数 (0,R); R ;(R,+oo)

很好&#xff0c;我们现在来回答你问的这个问题&#xff1a; &#x1f7e0; 幂级数在收敛半径 R R R 以外会发生什么&#xff1f; 我们考虑一个一般形式的幂级数&#xff1a; ∑ n 0 ∞ a n ( x − x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞​an​(x−x0​)n 它的…

C#学习13——正则表达式

一、正则表达式 是一种匹配输入文本的模式&#xff0c;是由特殊字符组成&#xff0c;用于匹配字符串中的字符组合。 二、正则表达式有哪些&#xff1f; 1.Regex 类&#xff08;引入System.Text.RegularExpressions;&#xff09; Regex 类用于表示一个正则表达式。 1&#…

【Redis】持久化机制:RDB / AOF 的应用与场景

文章目录 Redis 持久化一、RDB1.1 说明1.2 触发机制手动触发自动触发 1.3 流程说明1.4 文件处理1.5 优缺点 & 适用场景 二、AOF2.1 说明2.2 使用 AOF2.3 命令写入2.4 文件同步2.5 重写机制2.6 启动时数据恢复2.7 优缺点 & 适用场景 三、不使用 AOF / RDB 的情况3.1 场景…

Python 企业级开发与DevOps实践

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型项目结构与设计模式 项目结构规范 text 复制 下载 enterprise_app/ ├── docs/ # 项目文档 ├── tests/ # 测试代码 │ ├── unit/ …

E结构体基础.go

前言&#xff1a;结构体是一种用户自定义的数据类型&#xff0c;它可以将多个不同类型的数据整合在一起&#xff0c;形成一个有机的整体。这就好比在现实生活中&#xff0c;我们有各种各样的物品&#xff0c;它们各自有不同的属性和用途&#xff0c;而结构体就像是一个收纳箱&a…

Spring @Autowired 依赖注入全解析

Autowired 是 Spring 框架中实现依赖注入的核心注解&#xff0c;其自动装配过程可分为以下步骤&#xff0c;结合了类型匹配、名称解析和容器协作机制&#xff1a; 1. 组件扫描与 Bean 定义注册 扫描阶段&#xff1a;Spring 容器启动时&#xff0c;通过 ComponentScan 或 XML 配…

将git的普通目录用idea初始化为maven项目

在 IntelliJ IDEA 中将一个已存在的 Git 目录初始化为 Maven 项目&#xff0c;可以通过以下步骤完成。这些步骤假设你已经有一个包含代码的 Git 仓库&#xff0c;并希望将其转换为 Maven 项目结构&#xff0c;以便更好地管理依赖和构建。 步骤 1&#xff1a;打开或导入 Git 仓库…

Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建

一、key 属性的核心作用 在 Vue 中,key是一个特殊的属性,主要用于协助 Vue 的虚拟 DOM(Virtual DOM)算法高效地更新实际 DOM。它的核心作用可以概括为: 唯一标识节点:为每个节点提供一个唯一的身份标识优化 Diff 算法:帮助 Vue 准确判断两个节点是否为同一节点(如for循…

【音视频】PJSIP库——示例简介、C++类说明

1、简介 pjsip库的源码中有很多示例,是入门pjsip的第一手资料,下面将各个示例所演示的功能列举出来,以便下一步学习; 最后总结下C++接口主要类及成员函数说明。 2、示例介绍 2.1 音视频处理 aectest 音频回声消除测试工具,用于演示音频处理模块中的回声消除(AEC)功能…

网站用CDN可以防DDoS和CC攻击吗?

现在市面上常见有两种CDN&#xff0c;加速CDN与高防CDN&#xff0c;这两种的区别还是很大的。 加速CDN&#xff1a; 加速CDN基本上都是共享、无防节点&#xff0c;主要做的是加速&#xff0c;所以价格也会相对较低&#xff0c;大陆地区的CDN都需要备案域名接入使用。 高防CD…

【图片识别改名】批量识别图片中的文字对图片进行改名,识别文字对图片重新命名的操作步骤和注意事项

一、应用场景 快递单号识别与管理&#xff1a;在快递业务中&#xff0c;每天会产生大量的快递面单图片。通过咕嘎OCR批量识别面单上的快递单号等关键信息&#xff0c;并以此对图片进行重命名&#xff0c;方便工作人员快速查询和管理快递包裹的物流信息&#xff0c;提高快递处理…

先理解软件工程,再谈AI辅助研发

摘要&#xff1a; 近期行业内对“AI赋能软件工程”的讨论&#xff0c;大多聚焦于代码生成等局部提效&#xff0c;这是一种危险的短视。本文旨在纠正将“软件开发”等同于“编码”的普遍误解&#xff0c;深入探讨软件工程的系统性本质。我们将论证&#xff0c;若缺乏坚实的工程体…

Android软件适配遥控器需求-案例经验分享

不分大屏产品需要有遥控器功能&#xff0c;这里分享部分实战经验 文章目录 前言一、案例部分效果图二、项目基础架构三、焦点基础知识适配遥控器基础-焦点问题焦点管理明确焦点状态布局实现硬编码实现引入第三方自定义组件实现 焦点顺序作用 初始焦点 requestFocus 按键处理获取…

《HTTP权威指南》 第3章 HTTP报文

报文是如何流动的 HTTP报文是在HTTP程序之间发送的数据块。数据块以一些文本形式的元信息开头。 报文方向有&#xff1a;流入、流出、上游、下游。 流入和流出描述事务处理的方向&#xff0c;流入和流出是基于服务器的描述。 流入&#xff1a;客户端发往服务器的请求报文 流…

Kafka 集群架构与高可用方案设计(二)

Kafka 集群架构与高可用方案的优化策略 合理配置参数 在 Kafka 集群的配置中&#xff0c;参数的合理设置对于系统的高可用性和性能表现起着关键作用。例如&#xff0c;min.insync.replicas参数定义了 ISR&#xff08;In-Sync Replicas&#xff0c;同步副本&#xff09;集合中…

47-Oracle ASH报告解读

上一期生成了ASH报告后&#xff0c;就需要解读报告关键信息。ASH的使用可以快速定位瞬时性能问题。生产环境的场景时间紧、任务重&#xff0c;但是必须要结合具体业务分析&#xff0c;同时借助其他工具做报告做趋势分析。 一、ASH 技术原理​ ​1. 核心机制​ ​采样原理​&a…

“本地化思维+模块化体验”:一款轻量数据中心监控系统的真实测评

“本地化思维模块化体验”&#xff1a;一款轻量数据中心监控系统的真实测评 在数据中心运维逐步精细化的今天&#xff0c;一款真正贴合本地用户习惯、设计有温度的系统并不多见。近期体验了一款功能全面、逻辑清晰的监控平台&#xff0c;给人留下了深刻印象。并不是广。今天就从…