【Python】数据解析——Re解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 【Python】数据解析——Re解析

有时候爬取的数据返回的直接是一个混杂着数据和结构的HTML文件,这个时候获取数据需要进行数据解析,python数据解析主要有三种方法:

1. re解析

效率最高,但是有点复杂,对新手不太友好,准确率高

2. bs4解析

最常用和简单,但是效率并不高

3. xpath解析

清晰易懂

1. Re(regular expression) 正则表达式

先看看正则表达的规则:

1-1 元字符

. ===>匹配除换行符外的任意字符

\n ===> 匹配换行符

\w ===> 匹配字母或数字或下划线

\s ===> 匹配任意的空白符

\d ===> 匹配数字

\t ===> 匹配制表符

^ ===> 匹配字符串的开始

$ ===> 匹配字符串的结尾

\W ===> 匹配非字母或数字或下划线

\D ===> 匹配非数字

\S ===> 匹配非空白符

a|b ===> 匹配a或b

()===> 匹配括号内的表达式,也表示一个组

[...] ===> 匹配字符组中的字符

[^...] ===> 匹配除了字符组中字符的所有字符

1-2 量词

* ===> 重复零次或更多次

+ ===> 重复一次或更多次

? ===> 重复零次或一次

{n} ===> 重复n次

{n,} ===> n重复n次或更多次

{n,m} ===> n重复n次到m次

贪婪匹配===> .*

惰性匹配===> .*?

在爬虫里面,惰性匹配用的更多

【Re】Demo - re的方法介绍

import re
# findall 以数组的形式返回所有匹配的结果
result = re.findall(r"\d+","我的电话号码是:10010,我对手的电话是:10086")
print(result)
# finditer 以迭代器的方式返回所有匹配结果,.group()返回匹配到的结果
res = re.finditer(r"\d+","我的电话号码是:10010,我对手的电话是:10086")
print(res)
for i in res:
    print(i)
    print(i.group())
# search() 返回第一个找到的结果并封装在迭代器中
a = re.search(r"\d+","我的电话号码是:10010,我对手的电话是:10086")
print(a)
print(a.group())
# match() 从头匹配结果并返回在迭代器中
b = re.match(r"\d+","我的电话号码是:10010,我对手的电话是:10086")
print(b)
c = re.match(r"\d+","10010,我对手的电话是:10086")
print(c.group())
# 预加载正则规则
obj = re.compile(r"\d+")
resp = obj.findall("我的电话号码是:10010,我对手的电话是:10086")
print(resp)

结果截图:


image.png

re.S——表示可以匹配到换行符

【Re】Demo - re的案例

import re
s = '''
    <div id="1">CCNU</div>
    <div id="2">HUST</div>
    <div id="3">SSE</div>
    <div id="4">CSUT</div>
'''
pattern = re.compile(r'<div id="(?P<id>\d)">(?P<name>.*?)</div>',re.S)
res = pattern.finditer(s)
for i in res:
    print(i.group("id"))
    print(i.group("name"))

image.png

获取豆瓣top250的电影数据并写进csv文件中

import requests
import re
import csv
url = "https://movie.douban.com/top250"
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
}
res = requests.get(url,headers=headers)
if res.status_code == 200:
    result = res.text
pattern = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<title>.*?)</span>'
                     r'.*?<p class="">.*?<br>(?P<year>.*?)&nbsp;'
                     r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
                     r'.*?<span property="v:best" content="10.0"></span>.*?<span>(?P<ratingNum>.*?)人评价</span>',re.S)
a = pattern.finditer(result)
f = open("doubantop250.csv",mode="w")
csvwriter = csv.writer(f)
for i in a:
    # print(i.group("title"))
    # print(i.group("year").strip())
    # print(i.group("score"))
    # print(i.group("ratingNum"))
    dic = i.groupdict()
    dic['year'] = dic["year"].strip()
    csvwriter.writerow(dic.values())
f.close()
res.close()


目录
相关文章
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
7天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
8天前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
13天前
|
数据采集 监控 搜索推荐
深度解析淘宝商品详情API接口:解锁电商数据新维度,驱动业务增长
淘宝商品详情API接口,是淘宝开放平台为第三方开发者提供的一套用于获取淘宝、天猫等电商平台商品详细信息的应用程序接口。该接口涵盖了商品的基本信息(如标题、价格、图片)、属性参数、库存状况、销量评价、物流信息等,是电商企业实现商品管理、市场分析、营销策略制定等功能的得力助手。
|
23天前
|
搜索推荐 API 开发者
深度解析:利用商品详情 API 接口实现数据获取与应用
在电商蓬勃发展的今天,数据成为驱动业务增长的核心。商品详情API接口作为连接海量商品数据的桥梁,帮助运营者、商家和开发者获取精准的商品信息(如价格、描述、图片、评价等),优化策略、提升用户体验。通过理解API概念、工作原理及不同平台特点,掌握获取权限、构建请求、处理响应和错误的方法,可以将数据应用于商品展示、数据分析、竞品分析和个性化推荐等场景,助力电商创新与发展。未来,随着技术进步,API接口将与人工智能、大数据深度融合,带来更多变革。
62 3
|
25天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17

推荐镜像

更多