python爬虫(1)——正则表达式
原子
原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。
常见的原子类型:
- 普通字符作为原子
- 非打印字符作为原子
- 通用字符作为原子
- 原子表
#普通字符作为原子
import re
string="iloveyou"
pat="ve"
res=re.search(pat,string)
print(res)
#非打印字符作为原子,如\n \t
string='''hello
world
'''
pat="\n"
res=re.search(pat,string)
print(res)
#通用字符作为原子
'''
\w 字母、数字、下划线
\W 除字母、数字、下划线
\d 十进制
\D 除十进制
\s 空白字符
\S 除空白字符
'''
string='''hello world 123'''
pat="\d\d"
res=re.search(pat,string)
print(res)
#原子表
#[xyz]:从中任意取一个原子
#[^xyz]:除xyz的任意一个字符
string="iloveyou"
pat="i[^love]o"
res=re.search(pat,string)
print(res)
元字符
元字符是正则表达式中具有一些特殊含义的字符,比如重复N此前面的字符等。
- ".":除换行符外任意一个字符
- “^”:开始位置
- “$”:结束位置
- “*”:0\1\多次
- "?":0\1次
- “+”:1\多次
- [n]:恰好n次
- {n,}:至少n次
- {n,m}:至少n次,至多m次
- |:模式选择符或
- ():模式单元
模式修正符
可以在不改变正则表达式的情况下,通过模式修正符改变正则表达式的含义,从而实现一些匹配结果的调整等功能。
- I:匹配时忽略大小写
- M:多行匹配
- L:本地化识别匹配
- U:unicode
- S:让.匹配包括换行符
用法:
#模式修正符
string="Python"
pat="pyt"
res=re.search(pat,string,re.I)
print(res)
贪婪模式与懒惰模式
贪婪模式的核心点就是尽可能多的匹配,而懒惰模式是尽可能少的匹配。默认贪婪模式。
懒惰模式要加?
#贪婪模式与懒惰模式
string="poythonyhjskjsa"
pat1="p.*y"#贪婪模式
pat2="p.*?y"#懒惰模式,精准
res1=re.search(pat1,string,re.I)
res2=re.search(pat2,string,re.I)
print(res1)
print(res2)
正则表达式函数
- match:从头开始匹配
- search:任何位置都可以
- 全局匹配函数:re.compile(pat).findall(string)
实例
匹配.com和.cn网址:
string="<a href='http://www.baidu.com'>百度首页</a>"
pat="[a-zA-Z]+://[^\s]*[.com|.cn]"
res=re.compile(pat).findall(string)
print(res)
匹配电话号码:
string="afawda027-651315641s3dfs152sd"
pat="\d{4}-\d{7}|\d{3}-\d{8}"
res=re.compile(pat).findall(string)
print(res)
简单爬虫的编写
import urllib.request
data=urllib.request.urlopen("http://edu.csdn.net").read()
提取网页的电话(QQ……)
import urllib.request
import re
data=urllib.request.urlopen("https://edu.csdn.net/huiyiCourse/detail/1041").read().decode("utf-8")
pat="<p> 电话:(\d*?)</p>"
res=re.compile(pat).findall(data)
print(res[0])
爬取豆瓣出版社
import urllib.request
import re
data=urllib.request.urlopen("https://read.douban.com/provider/all").read().decode("utf-8")
pat='<div class="name">(.*?)</div>' #加上圆括号后可以只显示括号里的内容
res=re.compile(pat).findall(data)
with open("出版社","w") as fp:
for i in range(len(res)):
print(res[i])
fp.write(res[i]+'\n')
fp.close()
python爬虫(1)——正则表达式的更多相关文章
- 玩转python爬虫之正则表达式
玩转python爬虫之正则表达式 这篇文章主要介绍了python爬虫的正则表达式,正则表达式在Python爬虫是必不可少的神兵利器,本文整理了Python中的正则表达式的相关内容,感兴趣的小伙伴们可以 ...
- 【Python爬虫】正则表达式与re模块
正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...
- python 爬虫之-- 正则表达式
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 正则表达式非python独有,python 提供了正则表达式的接口,re模块 一.正则匹配字符简介 模式 描述 \d ...
- python爬虫训练——正则表达式+BeautifulSoup爬图片
这次练习爬 传送门 这贴吧里的美食图片. 如果通过img标签和class属性的话,用BeautifulSoup能很简单的解决,但是这次用一下正则表达式,我这也是参考了该博主的博文:传送门 所有图片的s ...
- 【python爬虫和正则表达式】爬取表格中的的二级链接
开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...
- Python爬虫运用正则表达式
我看到最近几部电影很火,查了一下猫眼电影上的数据,发现还有个榜单,里面有各种经典和热映电影的排行榜,然后我觉得电影封面图还挺好看的,想着一张一张下载真是费时费力,于是突发奇想,好像可以用一下最近学的东 ...
- Python爬虫之正则表达式(3)
# re.sub # 替换字符串中每一个匹配的子串后返回替换后的字符串 import re content = 'Extra strings Hello 1234567 World_This is a ...
- Python爬虫之正则表达式(1)
廖雪峰正则表达式学习笔记 1:用\d可以匹配一个数字:用\w可以匹配一个字母或数字: '00\d' 可以匹配‘007’,但是无法匹配‘00A’; ‘\d\d\d’可以匹配‘010’: ‘\w\w\d’ ...
- python爬虫之正则表达式
一.简介 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念 ...
- Python爬虫基础——正则表达式
说到爬虫,不可避免的会牵涉到正则表达式. 因为你需要清晰地知道你需要爬取什么信息?它们有什么共同点?可以怎么去表示它们? 而这些,都需要我们熟悉正则表达,才能更好地去提取. 先简单复习一下各表达式所代 ...
随机推荐
- OSI参考模型总结
OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型.下面我们将一层一层的看OSI协议. ...
- GCN 实现3 :代码解析
1.代码结构 ├── data // 图数据 ├── inits // 初始化的一些公用函数 ├── layers // GCN层的定义 ├── metrics // 评测指标的计算 ├── mode ...
- 错题shell
1.判断/root/class21/inittab.txt文件是否大于100行,如果大于,则显示”inittab is a big file.”否者显示”inittab is a small file ...
- 用CSS绘制实体三角形
用CSS绘制实体三角形 使用CSS盒模型中的border(边框)即可实现如下所示的三角形: .box { width: 0; height: 0; border-width: 100px; borde ...
- java图形界面 计算器实现
编写程序实现一个简单计算器的基本功能,具体可以模仿Windows附件中的计算器或模拟常见的实物计算器. package beizi; import java.awt.EventQueue; impor ...
- 用OC实现双向链表:构造链表、插入节点、删除节点、遍历节点
一.介绍 双向链表:每一个节点前后指针域都和它的上一个节点互相指向,尾节点的next指向空,首节点的pre指向空. 二.使用 注:跟单链表差不多,简单写常用的.循环链表无法形象化打印,后面也暂不实现了 ...
- 实例调用(__call__())
任何类,只需要定义一个__call__()方法,就可直接对实例进行调用 对实例进行直接调用就好比对一个函数进行调用一样 __call__()还可定义参数,所以调用完全可以把对象看成函数,把函数看成对象 ...
- Windows下cwrsync客户端与rsync群辉存储服务端定时数据同步
cwRsync简介 cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件. cwRsync主要用于Windows上的远程文件 ...
- Linux shell脚本编程及系统启动实践
1.编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www [root@test qiuhom]#cat che ...
- struts2文件上传报错
说明上传的文件为空,检查上传文件名