爬虫入门指南(2):如何使用正则表达式进行数据提取和处理

news2025/1/12 2:49:32

文章目录

  • 正则表达式
  • 正则表达式中常用的元字符和特殊序列
    • 案例
  • 使用正则表达式提取数据
  • 案例
  • 存储数据到文件或数据库
    • 使用SQLite数据库存储数据的示例代码
    • SQLite基本语法
      • 创建表格:
      • 插入数据:
      • 查询数据:
      • 更新数据:
      • 删除数据:
      • 条件查询:
      • 排序:
    • 代码案例
  • 未完待续…

正则表达式

正则表达式

正则表达式是一种用于匹配和处理文本的工具,可以定义规则和模式来查找、替换和提取目标数据。Python中内置的re模块可用于操作正则表达式。

正则表达式中常用的元字符和特殊序列

  • .:匹配任意字符(除了换行符)。
  • \d:匹配任意数字。
  • \w:匹配任意字母数字字符(包括下划线)。
  • \s:匹配任意空白字符(包括空格、制表符等)。
  • +:匹配前面的元素一次或多次。
  • *:匹配前面的元素零次或多次。
  • ?:匹配前面的元素零次或一次。
  • {n}:匹配前面的元素恰好n次。
  • {n,}:匹配前面的元素至少n次。
  • {n,m}:匹配前面的元素至少n次且不超过m次。

正则表达式还支持分组、贪婪与非贪婪匹配、边界匹配等高级功能。

案例

假设我们有一个字符串text = "Hello, my phone number is 123-456-7890",我们想从中提取出手机号码。可以使用正则表达式\d{3}-\d{3}-\d{4}进行匹配。

import re

text = "Hello, my phone number is 123-456-7890"

match = re.search(r"\d{3}-\d{3}-\d{4}", text)
if match:
    phone_number = match.group()
    print(phone_number)

输出结果为:123-456-7890

分析说明 :

代码中,正则表达式模式\d{3}-\d{3}-\d{4}用于匹配电话号码的格式。这个模式由以下部分组成:

  • \d{3}:匹配三个连续的数字。
  • -:匹配一个横线字符。
  • \d{3}:匹配三个连续的数字。
  • -:匹配一个横线字符。
  • \d{4}:匹配四个连续的数字。
    注意:\d代表数字字符。

如果re.search()函数找到了匹配的结果,它将返回一个Match对象,否则返回None。

接着,使用条件语句if match来检查是否找到了匹配结果。如果找到了匹配,就执行以下代码块。

match.group()方法用于获取匹配结果的字符串表示。

使用正则表达式提取数据

Python中,我们可以利用re模块的函数使用正则表达式进行数据提取。常用的函数有:

  • re.search(pattern, string):在给定字符串中查找第一个匹配项,并返回一个匹配对象。通过匹配对象的方法如group()start()end(),可以获取具体的匹配结果。
  • re.findall(pattern, string):在给定字符串中查找所有匹配项,并以列表形式返回所有结果。
  • re.sub(pattern, repl, string):在给定字符串中查找匹配项,并将其替换为指定内容。
  • re.split(pattern, string):根据给定模式对字符串进行拆分,并以列表形式返回拆分后的结果。

案例

假设我们有一个包含多个电子邮件地址的字符串text = "Contact us at info@example.com or support@example.com",我们想提取出其中的电子邮件地址。可以使用正则表达式\w+@\w+\.\w+进行匹配。

import re

text = "Contact us at info@example.com or support@example.com"

emails = re.findall(r"\w+@\w+\.\w+", text)
print(emails)

输出结果为:
在这里插入图片描述

分析说明:

正则表达式模式\w+@\w+.\w+用于匹配电子邮件地址的格式。这个模式由以下部分组成:

  • \w+:匹配一个或多个字母、数字或下划线字符(即匹配邮箱地址的用户名部分)。
  • @:匹配一个 @ 符号。
  • \w+:匹配一个或多个字母、数字或下划线字符(即匹配邮箱地址的域名部分)。
  • .:匹配一个点(.)字符。
  • \w+:匹配一个或多个字母、数字或下划线字符(即匹配邮箱地址的顶级域名部分)。

注意:\w代表字母、数字或下划线字符。
re.findall()函数将返回一个包含所有匹配的字符串列表。

存储数据到文件或数据库

PYTHON 存储数据

在Python中,我们可以使用内置的文件操作函数来将数据保存到文件中。

首先,使用open()函数打开一个文件,传入两个参数:文件名和打开模式。打开模式可以是 “w”(写入)、“a”(追加)、“r”(只读)等。如果文件不存在,将会创建一个新的文件。

with open("data.txt", "w") as file:
    file.write("这是要保存的数据")

代码中,我们使用open()函数打开名为"data.txt"的文件,并指定打开模式为"w"(写入)。然后,使用文件对象的write()方法将数据写入文件中。
如果需要更复杂的数据管理和查询,可以使用数据库系统来存储数据。常见的数据库系统包括MySQL、SQLite和MongoDB等。

在Python中,我们可以使用相应的数据库驱动程序(如mysql-connector-pythonsqlite3pymongo)来连接数据库并执行操作。

使用SQLite数据库存储数据的示例代码

SQLite基本语法

在这里插入图片描述

创建表格:

使用CREATE TABLE语句创建新的表格。指定表格的名称和列定义。每个列都包括列名和数据类型。你还可以为特定的列指定约束条件。例如:

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER DEFAULT 0
);

示例中,我们创建了一个名为"users"的表格,包含id、name和age三个列。id列被定义为主键(PRIMARY KEY),name列被定义为非空(NOT NULL),age列设置了默认值为0。

插入数据:

使用INSERT INTO语句插入新的数据行。指定表格名称和要插入的值。你可以插入指定的列或者省略列名插入所有列。例如:

INSERT INTO users (name, age) VALUES ('Alice', 25);

或者省略列名插入所有列:

INSERT INTO users VALUES (1, 'Alice', 25);

这将在"users"表格中插入一行数据,其中name列的值为’Alice’,age列的值为25。

查询数据:

使用SELECT语句从表格中检索数据。指定所需的列和表格名称。你还可以使用WHERE子句添加筛选条件。例如:

SELECT * FROM users;

这将检索出"users"表格中的所有列和行。

SELECT name, age FROM users WHERE age >= 20;

这将返回"users"表格中age列大于或等于20的行,并且只包括name和age两列。

更新数据:

使用UPDATE语句更新表格中的数据。指定表格名称、要更新的列和新值,以及更新条件。例如:

UPDATE users SET age = 30 WHERE name = 'Alice';

这将把"users"表格中名为’Alice’的行的age列更新为30。

删除数据:

使用DELETE FROM语句从表格中删除数据。指定表格名称和删除条件。例如:

DELETE FROM users WHERE age < 18;

这将从"users"表格中删除所有age列小于18的行。

条件查询:

使用WHERE子句来添加条件,对查询结果进行筛选。可以使用比较运算符(如=、<、>)和逻辑运算符(如AND、OR、NOT)组合多个条件。例如:

SELECT * FROM users WHERE age >= 20 AND age < 30;

这将返回"users"表格中age列大于等于20且小于30的行。

排序:

使用ORDER BY子句对查询结果进行排序。指定要排序的列和排序顺序(升序ASC或降序DESC)。例如:

SELECT * FROM users ORDER BY age DESC;

这将按照age列的降序对"users"表格中的行进行排序。

这里只是对常用的SQLite语法进行了介绍。实际上,SQLite还支持更多的功能和语法,例如连接操作、聚合函数(如SUM、AVG等)、子查询、联合查询等等。

代码案例

import sqlite3

conn = sqlite3.connect("data.db")
cursor = conn.cursor()

sql = "INSERT INTO users (name, age) VALUES (?, ?)"
data = [("Alice", 25), ("Bob", 30), ("Charlie", 35)]

cursor.executemany(sql, data)

conn.commit()
conn.close()

例子中,我们首先使用sqlite3.connect()函数连接到名为"data.db"的SQLite数据库,并创建一个游标对象。然后,我们定义了一条SQL语句,用于向名为"users"的表中插入数据。最后,我们使用cursor.executemany()方法批量执行插入操作,并通过conn.commit()保存更改。

未完待续…

未完待续

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

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

相关文章

尚硅谷Docker实战教程-笔记05【本地镜像发布到阿里云与私有库】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

LinkedHashMap 学习了解

一、概念 定义&#xff1a; public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> LinkedHashMap 继承 HashMap 的功能&#xff0c;增加保证了元素的有效 /*** The head (eldest) of the doubly linked list.* 双向列表&#xff0c;表…

本地axure做好的展示网站如何发布到互联网上访问?快解析端口映射

Axure 是产品经理常用的原型设计工具&#xff0c;设计的原型导出的html就是一个静态网站的文件&#xff0c;可以部署在服务器、对象存储上做成一个静态网站&#xff0c;然后通过 快解析免费域名&#xff08;或自己的独立域名&#xff09;外网访问&#xff0c;用它就可以完成从设…

WebView头部添加android原生视频播放

需求&#xff1a;我们需要做一个h5页面&#xff0c;并且可以现实加载更多&#xff0c;并且头部我们想要加一个视频播放器&#xff0c;因为h5不够丝滑。 话不多说咱们直接上代码 Xml布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <…

finalshell提示java.net.ConnectException: Connection timed out: connect

为什么超时&#xff1f; 事情是这样的&#xff0c;为了不向学校低头&#xff0c;我没有开通校园网&#xff0c;买了流量卡&#xff0c;于是每次都给电脑开热点&#xff0c;朋友叫我吃饭&#xff0c;我直接就走了&#xff0c;干完饭回来&#xff0c;在finalshell里面它提示java.…

ASEMI代理光宝光耦LTV-6341的应用与性能分析

编辑-Z 本文将全面深入地探讨光耦LTV-6341的应用与性能。首先&#xff0c;我们将介绍光耦LTV-6341的基本概念和工作原理&#xff0c;然后&#xff0c;我们将详细分析其在电子设备中的应用&#xff0c;接着&#xff0c;我们将对其性能进行深入的分析&#xff0c;最后&#xff0…

US-P1-R-S单路控制比例阀放大器

US-P1-R-S、US-P1-R-C、US-P2-R-S、US-P2-R-C、US-P1-M-C、US-P2-M-S M12插头端子号 &#xff08;US-P1-…-C&#xff09; 线缆颜色 &#xff08;US-P1-…-S&#xff09; 端子定义 &#xff08;US-P1-R&#xff09; 端子定义 &#xff08;US-P1-M&#xff09; 1 红 2 …

【零基础学习C++】如何写一个C++类?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️系列专栏:零基础学习C】 文章目录 前言什么是类&#xff1f;&#x1f914;类的三大特性&#x1f463;定义一个类&#x1f4bb;类的实例化&#x1f52c; 前言 类是对现实生活中一类具有共同特征的事物…

第五章.­ ­ Training Versus Testing

第五章. Training Versus Testing 上一章主要介绍机器学习的可行性。由NFL定理可知&#xff0c;机器学习貌似是不可行的&#xff0c;但是随后引入了统计学知识&#xff0c;如果样本数量足够大&#xff0c;且hypothesis数量有限&#xff0c;那么机器学习一般是可行的&#xff0…

哪款是你值得拥有地图可视化开发平台

地图可视化在当今的数据分析和决策制定等领域中发挥着越来越重要的作用&#xff0c;越来越多的企业和个人开始关注和使用这一技术。而地图可视化开发平台作为地图可视化的重要工具和平台&#xff0c;其选择合适的产品对于产品效果和开发效率都具有非常重要的意义。在选择地图可…

Spring Boot中的SimpMessagingTemplate是什么,原理,以及如何使用

Spring Boot中的SimpMessagingTemplate是什么&#xff0c;原理&#xff0c;以及如何使用 SimpMessagingTemplate是Spring Framework中的一个类&#xff0c;用于向WebSocket客户端发送消息。在Spring Boot应用程序中&#xff0c;可以使用SimpMessagingTemplate来实现WebSocket通…

【GPT】中文大语言模型梳理与测评(C-Eval 、AGIEval、MMLU、SuperCLUE)

文章目录 概述申请后直接使用大模型开源可本地部署 通识数据集测评&#xff08;C-Eval 、AGIEval、MMLU、SuperCLUE&#xff09;自媒体报道SuperCLUE&#xff1a;中文通用大模型综合性基准C-Eval&#xff1a;中英测评&#xff08;清华上交提出&#xff09;当前排名&#xff08;…

Object counting——生成密度图density map

文章目录 过程代码参考 过程 首先构造一个和原始图片大小相同的矩阵&#xff0c;并将其全部置为0&#xff0c;然后将每个被标记的人头对应的位置置为1&#xff0c;这样就得到了一个只有0和1的矩阵&#xff0c;最后通过高斯核函数进行卷积得到一个连续的密度图。 代码 import…

如何对修改密码接口进行压测?终于找到解决办法了

做接口测试中&#xff0c;对于一般性的单业务接口测试很多工具可供选择&#xff0c;但是对于一些相关业务相关性的关联接口测试就比较麻烦&#xff0c;使用工具比如jmeter、postman、soapui等等就比较麻烦。我比较偏重脚本化执行测试用例&#xff0c;所以选择了groovy作为主要语…

JAVA选择题笔试:static成员与非static成员、父类子类方法的继承、接口与抽象类、final的使用

0、前言 本文针对一些java基础知识的一些考点做出解析。 1、静态成员 与 非静态成员 静态变量与静态方法都是静态成员。 先说静态变量与普通成员变量的区别&#xff0c;例如如下两个变量&#xff1a; public class Demo {public static String A "静态变量";publi…

迅镭激光高功率切割机成功交付招商重工,助推船舶行业智造升级!

近日&#xff0c;迅镭激光-招商重工高功率激光切割机交机仪式在招商局重工(江苏)有限公司顺利举行。 招商重工项目负责人佘刚林、孙宗宇&#xff0c;迅镭激光总经理助理刘富生、营销中心行业总监杨林等领导参加交付仪式&#xff0c;共同见证了这一激动人心的时刻。 本次交付的机…

日历组件 el-calendar 实现标记功能

需求&#xff1a;在日历组件中选择月份时&#xff0c;可以显示当月已经质检或需质检的数据 思路&#xff1a;前端每次点击日期选择器的时候调用接口&#xff0c;接口返回当月需要质检或已质检的数据&#xff0c;前端拿到数据就开始做判断然后回显。 大体样式 代码&#xff1a…

【每日一短语】给某人严重的惊吓

1、短语及释义 scare the pants off sb. 释义&#xff1a; 把某人的裤子吓掉&#xff1b;引申为严重的惊吓 2、示例及出处 美剧&#xff1a;《生活大爆炸》第八季第2集 The Big Bang Theory, Season 8 Episode 2 Leonard Hofstadter: I think the idea that someone could be …

【操作指南】EasyNTS上云网关如何删除日志?

EasyNTS上云网关主要包括两个部分&#xff1a;第一部分是软硬结合的EasyNTS上云网关设备。EasyNTS上云网关有单独的软件部分&#xff0c;具有拉转推功能&#xff0c;用户可集成部署在自己的硬件终端和业务系统中&#xff0c;也有软硬一体的硬件部分&#xff0c;根据需求直接配置…

CSS中伪元素详解和用法例子详解

文章目录 一、伪元素介绍二、::before和::after三、::first-line和::first-letter四、::selection五、::placeholder 一、伪元素介绍 伪元素&#xff1a;用于创建一些不在DOM树中的元素&#xff0c;并为其添加样式。 二、::before和::after ::before 伪元素可以用来创建一个…