首页 > 其他分享 >003爬虫之数据解析概述-正则表达式

003爬虫之数据解析概述-正则表达式

时间:2022-11-27 21:13:27浏览次数:36  
标签:匹配 正则表达式 爬虫 003 re 正则 result 解析

当我们爬到了网页的源代码之后,我们就需要对指定的数据进行获取,比如上一篇中只获取电影名称和上映时间,这里我们需要对获取的数据进行解析,以下提供四种解析方式:

1.re解析
2.bs4解析
3.xpath解析
4.pyquery解析

第一个re解析就是正则表达式(Regular Expression),一种使用表达式的方式对字符串进行匹配的语法规则。
正则的优点: 速度快, 效率高, 准确性高。
正则的缺点: 新手上手难度有点儿高。
Python里面有正则表达式,excel里面也可以用。接下来我们一起聊聊正则表达式在excel和python中的使用。首先我们了解下正则的语法,使用元字符进行排列组合用来匹配字符串 在线测试正则表达式https://tool.oschina.net/regex/
image
元字符: 具有固定含义的特殊符号
常用元字符:

 .     匹配除换行符以外的任意字符,  未来在python的re模块中是一个坑. 
 \w    匹配字母或数字或下划线
 \s    匹配任意的空白符
 \d    匹配数字
 \n    匹配一个换行符
 \t    匹配一个制表符
 
 ^     匹配字符串的开始
 $     匹配字符串的结尾
 
 \W    匹配非字母或数字或下划线
 \D    匹配非数字
 \S    匹配非空白符
 a|b   匹配字符a或字符b
 ()    匹配括号内的表达式,也表示一个组
 [...]    匹配字符组中的字符
 [^...]    匹配除了字符组中字符的所有字符

量词: 控制前面的元字符出现的次数

 *    重复零次或更多次
 +    重复一次或更多次
 ?    重复零次或一次
 {n}    重复n次
 {n,}    重复n次或更多次
 {n,m}    重复n到m次

贪婪匹配和惰性匹配。

 .*     贪婪匹配,  尽可能多的去匹配结果
 .*?    惰性匹配,  尽可能少的去匹配结果 -> 回溯

这两个需要重点学习下,我这里举个例子大家参考。
image
image
大家可以自行比对下上面的两张图的结果。.*? 表示尽可能少的匹配, .*表示尽可能多的匹配。

接下来我们看看正则表达式在excel中的使用。
比如:在excel中想获得“我的年龄12岁。”这句话中数字12,用其它的方式感觉都比较困难获取,这里通过正则表达式就非常简单。公式为:@RegexRlt(B5,"\d+",3,,,)。
image
可能大家比较难以理解这个函数,我推荐大家一个excel嵌套工具:方方格子,然后导入公式向导,里面选择文本->正则表达式。
image
这样大家以后在excel里面需要处理字符串等问题就可以用正则表达式了。

接下来我们再看看正则表达式在Python中的使用。
我们用的模块是re模块,这个模块Python里面是自带的,无需下载。
接下来我们看看re模块我们可能会用到的几个功能:
1.findall查找所有,返回list

import re

result = re.findall(r"\d+", "我今年18岁,我有200000块")
print(result)

结果如下:
image
2.finditer, 和findall差不多. 只不过这时返回的是迭代器(需要重点学习)

# 迭代器,可以提升程序的速度
result = re.finditer(r"\d+", "我今年18岁,我有200000块")

for item in result:
    print(item.group()) # 从匹配到的结果拿到数据

结果如下:
image
3.search会进行匹配,但是如果匹配到了第一个结果,就会返回这个结果。如果匹配不上search返回的则是None。

# search只会匹配到第一次匹配的内容
result = re.search(r"\d+", "我是周杰伦,今年32岁,我的班级是5年级4班")
print(result.group())

结果如下:
image
4.match只能从字符串的开头进行匹配。

# match在匹配的时候是从字符串的开头进行匹配的,类似于在正则前面加上^,用得特别少
result = re.match(r"\d+", "32岁,我的班级是5年级4班")
print(result.group())

结果如下:
image
5.compile()将正则进行预加载,方便后面使用。这样用的原因为了防止每次使用的时候都去加载它,消耗资源。

# 预加载,提前把正则对象加载完毕
obj = re.compile(r"\d+")
# 直接把加载好的正则进行使用
result = obj.findall("我是周杰伦,今年32岁,我的班级是5年级4班")
print(result)

结果如下:
image

经过上面的案例之后,我们来学习一个比较贴近爬虫实际使用的例子。比如你爬到了如下的字符串文本,你如何进一步解析里面想要的内容获取10010,中国联通和10086,中国移动?
s = """

中国联通 中国移动 """

代码如下:

# 如何从正则中提取网页的数据
# 想要提取数据必须用小括号括起来,可以单独起名字
# (?P<名字>正则)
# 提取数据的时候,需要group("名字")
s = """
<div class='西游记'><span id='10010'>中国联通</span></div>
<div class='西游记'><span id='10086'>中国移动</span></div>
"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>.*?)</span>")

for item in obj.finditer(s):
    id = item.group("id")
    name = item.group("name")
    print(id, name)

结果如下:
image
以上就是我们使用正则表达式初步做的一些尝试,以后处理字符串大家可以考虑用正则去处理,很强大。

标签:匹配,正则表达式,爬虫,003,re,正则,result,解析
From: https://www.cnblogs.com/stone-wei/p/16930654.html

相关文章

  • 这就是搜索引擎(2) 网络爬虫
    1.背景互联网网页是通用搜索引擎主要的处理对象,目前互联网上的网页数量以百亿计,所以通用搜索引擎首要面临的问题是:如何设计出高效的下载系统,将海量的网页数据传输到本地,......
  • 正则表达式
    用来匹配需要的字符串。1、标准字符集合表达式:\d:任意数字字符。\D:任意除了数字以外的字符。\w:任意字母、数字、下划线字符。\W:任意除了字母数字下......
  • 重庆大学生自主创业 创建重庆爬虫信息技术有限公司简称 爬虫科技
    ​​重庆爬虫信息技术有限公司​​关于我们:重庆爬虫信息技术有限公司(官网:​​爬虫科技​​中文域名:瓦力科技.com)是服务器于全国移动互联应用服务领域集APP定制、开发、优化......
  • About [NOIP2003 普及组] 数字游戏
    题目描述丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有......
  • 【ClickHouse为什么这么快?】Hyperscan 超扫描算法:用于现代CPU的“快速-多模式”正则表
    ASIMDinstructionexecutesthesameoperationonmultipledatainparallel.ASIMDOperationASIMDoperationisperformedon multiplelanesoftwoSIMDregiste......
  • JMeter-正则表达式提取器的轻简教程
    1、取注册接口的用户名,赋值给变量username​2、将取到的username值给登录接口​3、验证登录是否成功​......
  • Python 爬虫:爬《权力的游戏》中英对照版
    VOA英文网有中英对照版 《权力的游戏》 ​​http://www.tingvoa.com/html/454618.html​​,但是只能在线看,而且每次不小段的太不方便了,想把它爬下来整理成大篇的,放到kindle......
  • python爬虫——站酷数据获取
    1.站酷数据获取其中需要注意,本文使用了IP代理,以及不同的作品类型,他们详情页url拼接方式不同importrandomimporttimeimportdatetimeimportrequestsimportthrea......
  • 每日食词—day003
    abortv. n.中止、终止、中断、放弃异常结束、异常中止、异常中断.absoluteadj. n.绝对的、绝对定位.accountn. v.账户、账目、账号、计费.acknowledge......
  • Python爬虫学习-seleuim交互
    Selenium1.selenium的安装操作edge浏览器驱动下载地址(注意要和edge浏览器版本保持一致)https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/pyc......