利用python爬虫(part3)--正则表达式
学习笔记
文章目录
- 正则表达式
- re模块的使用
- 正则表达式元字符
- 贪婪匹配和非贪婪匹配
- 贪婪模式
- 非贪婪模式
- 正则表达式分组
正则表达式
re模块的使用
re模块在爬虫中常用的方法:
re.findall()
re.compile()
pattern.finall()
匹配方式1(re.findall)
list01=re.findall('正则表达式',html,re.S)
#html就是我们获取的网页源代码字符串
#re.S为flag扩展参数,re.S表示使【.】可以匹配换行。这样【.】就可以匹配任意字符了
#返回值为包含符合正则表达式的字符串的列表
关于flag扩展参数,详细请见正则表达式教程。
匹配方式2(re.compile与pattern.findall)
#创建正则表达式对象
pattern = re.compile('正则表达式',re.S)
list02 = pattern.findall(html)
举个例子
代码:
import res01 = 'abchfgasca\nc'
list01 = re.findall('a.c', s01, re.S)
print(list01)
print('-'*15)pattern = re.compile('a.c')
list02 = pattern.findall(s01)
print(list02)
结果:
['abc', 'asc', 'a\nc']
---------------
['abc', 'asc']
正则表达式元字符
元字符的详细知识点,具体看正则表达式教程。
元字符 | 含义 |
---|---|
.
|
匹配任意一个字符(不包括\n) |
\d
|
匹配任意数字 |
\s
|
匹配空白字符 |
\S
|
匹配非空白字符 |
*
|
出现0次或多次 |
+
|
出现1次或多次 |
?
|
出现0次或1次 |
{m,n}
|
出现m-n次 |
贪婪匹配和非贪婪匹配
贪婪和非贪婪的详细知识点,具体看正则表达式教程。
贪婪模式
在整个表达式匹配成功的前提下,尽可能多的匹配
非贪婪模式
在整个表达式匹配成功的前提下,尽可能少的匹配
举个例子
要求:我想要匹配HTML页面中三对段落标签
中的兔子名称。
贪婪模式:
import rehtml = \
"""<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>正则表达式</title>
</head>
<body><p>黑白道奇</p><p>垂耳兔</p><p>北极兔</p>
</body>
</html>
"""
pattern = re.compile(r'<p>.+</p>', re.S)
list01 = pattern.findall(html)
print(list01)
结果:
['<p>黑白道奇</p>\n\t<p>垂耳兔</p>\n\t<p>北极兔</p>']
贪婪模式中,列表中只匹配到了一个结果,这个结果显然不符合我们的要求。
非贪婪模式:
import rehtml = \
"""<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>正则表达式</title>
</head>
<body><p>黑白道奇</p><p>垂耳兔</p><p>北极兔</p>
</body>
</html>
"""
pattern = re.compile(r'<p>.+?</p>', re.S)
list01 = pattern.findall(html)
print(list01)
结果:
['<p>黑白道奇</p>', '<p>垂耳兔</p>', '<p>北极兔</p>']
非贪婪模式下,我们的列表中存放了3个结果,且每一对段落标签中都有我们的兔子名称,基本符合我们的要求。
为啥说基本符合要求,而不是完全满足?因为我们只想要兔子名称,不想要段落标签
。所以,此时,我们就要使用正则表达式中的分组来解决这个问题了!
正则表达式分组
分组的详细知识点,请看正则表达式教程。
作用
在完整的模式中定义子模式,将每个圆括号中的子模式匹配出来的结果提取出来。
爬虫应用
①在网页中,想要提取什么内容,就在正则表达式中对应位置加()
②如果有2个及以上分组(),则结果中以元组形式显示 [(),(),()]
举个例子1
代码:
import res = 'A B C D'
p1 = re.compile('\w+\s+\w+')
print(p1.findall(s))#1个子组
p2 = re.compile('(\w+)\s+\w+')
#只输出子组中匹配结果
print(p2.findall(s))#多个子组
p3 = re.compile('(\w+)\s+(\w+)')
#按照元组形式,将各个子组中匹配结果输出
print(p3.findall(s))
结果:
['A B', 'C D'] ['A', 'C'] [('A', 'B'), ('C', 'D')]
举个例子2
我们有如下HTML页面结构:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>正则表达式</title>
</head>
<body><div class="animal"><p class="name"><a title="Tiger"></a></p><p class="content">Two tigers two tigers run fast</p></div><div class="animal"><p class="name"><a title="Rabbit"></a></p><p class="content">Small white rabbit white and white</p></div></body>
</html>
要求:我们想要提取每个div标签中,段落标签p内,标签a里的title参数值【“Tiger”、“Rabbit”】和字符串【Two tigers two tigers run fast、Small white rabbit white and white】
代码:
import rehtml = \
"""
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>正则表达式</title>
</head>
<body><div class="animal"><p class="name"><a title="Tiger"></a></p><p class="content">Two tigers two tigers run fast</p></div><div class="animal"><p class="name"><a title="Rabbit"></a></p><p class="content">Small white rabbit white and white</p></div></body>
</html>
"""pattern1 = re.compile(r'<div class="animal">.+?<p class="name">.+?<a title=(.+?)></a>', re.S)
pattern2 = re.compile(r'<div class="animal">.+?<p class="content">(.+?)</p>', re.S)s01 = pattern1.findall(html)
s02 = pattern2.findall(html)print(s01)
print(s02)
结果:
['"Tiger"', '"Rabbit"']
['\n\t\t\tTwo tigers two tigers run fast\n\t ', '\n\t\t\tSmall white rabbit white and white\n\t ']
当然,可以把两个子组放在一个正则表达式中,那么输出结果,就是一个包含两个元祖的列表。在这里,我就不写了,大家可以自己试一下。
现在我们从列表里拿出我们的值,并将值左右两侧的空格去掉:
for item01, item02 in zip(s01, s02):print('动物名称:', item01.strip())print('动物描述:', item02.strip())
结果:
动物名称: "Tiger"
动物描述: Two tigers two tigers run fast
动物名称: "Rabbit"
动物描述: Small white rabbit white and white
利用python爬虫(part3)--正则表达式相关推荐
- python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜
利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...
- 小游戏,利用Python爬虫之制作诗歌接龙
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:数据森麟 ( 想要学习Python?Python学习交 ...
- 手把手教你利用 python 爬虫分析基金、股票
手把手教你利用 python 爬虫分析基金.股票 文章目录 手把手教你利用 python 爬虫分析基金.股票 第一步:基金数据爬取 第二步:股票增持计算 第三步:好股基金选取 桌面程序 exe 从前大 ...
- 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!
前言: 最近迷上了一款游戏,但是作为一名程序员的我是不可能只玩游戏的,我必须把它的官网数据采集下来! 环境: windows python3.6.5 模块: requests jsonpath pyg ...
- 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
[爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...
- Python爬虫 | 利用python爬虫获取想要搜索的数据
这篇文章主要介绍了利用Python爬虫采集想要搜索的信息(利用某du的接口实现)并且处理掉它的反爬手段,文中示例代码很详细,具有一定的学习价值,感兴趣的小伙伴快来一起学习吧. ☀️新人小白博主
- python爬虫怎么赚钱-个人利用Python爬虫技术怎么挣钱-10万被动收入...
我利用Python爬虫技术年挣10万被动收入的方式,在正式聊Python爬虫技术之前,先来说说挣钱的事,说说作为一个自由职业或兼职者怎么利用爬虫来挣钱. 个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1: ...
- 05、Python爬虫之正则表达式常用方法(超全)
文章目录 前言 一.search()函数 二.match()函数 三.compile()函数 四.findall()函数 五.sub()函数 六.subn()函数 七.split()函数 八.补充说明 ...
- python爬虫赚钱的经历-个人利用Python爬虫技术怎么挣钱-10万被动收入
我利用Python爬虫技术年挣10万被动收入的方式,在正式聊Python爬虫技术之前,先来说说挣钱的事,说说作为一个自由职业或兼职者怎么利用爬虫来挣钱. 个人爬虫挣钱方法大致如下 爬虫技术挣钱方法1: ...
最新文章
- FFmpeg windows软件开发环境搭建
- 是否可以在其范围之外访问局部变量的内存?
- 源码编译安装 swoole
- Database----Cursor
- 如何通过VC的 CHttpFile 抓取网页内容
- Windows远程文件拷贝openEuler--WinSCP
- 局部内部类 java 1614958356
- 短视频直播一对一源码“皇冠”花落谁家
- C++中容器的使用(二)
- python鼠标选中文本内容_【求助】使用Python脚本如何获取Windows中选中的文本
- 财务系统flex和oracle,ORACLE EBS财务科目FLEX FIELD的添加
- 2. Ruby下载安装
- 微信小程序请求本地服务器测试成功
- RV32G下lui/auipc和addi结合加载立即数时的补值问题
- win10更改C盘下的用户文件夹名
- 服务器提示临时文件已满,为什么显示“临时文件夹已满或不能访问”
- Spring注解@Value在controller无法获取到值
- mount的挂载远程服务器文件夹
- 【JS】console.log()打印出五彩斑斓的黑
- Ubuntu16.04:GTX1650的显卡驱动安装
热门文章
- mysql数据库replace写入_MySQL数据库replace into 用法(insert into 的增强版)
- Java中return的用法
- Android 弹出对话框
- golang为LigerUI编写简易版本web服务器
- SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
- 三方协议,档案,工龄,保险,户口,
- Linux学习笔记三--vim
- 让你的C程序更有效率的10种方法
- 有关Rating组件的研究——Silverlight学习笔记[41]
- 使用windows 7加入windows server 2008的域!