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

简介: 【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月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
169 0
|
1月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
1097 1
|
1月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
1月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
367 0
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
2月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
2月前
|
JSON 缓存 开发者
淘宝商品详情接口(item_get)企业级全解析:参数配置、签名机制与 Python 代码实战
本文详解淘宝开放平台taobao.item_get接口对接全流程,涵盖参数配置、MD5签名生成、Python企业级代码实现及高频问题排查,提供可落地的实战方案,助你高效稳定获取商品数据。
|
2月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
229 2
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南

推荐镜像

更多