python爬虫(1)——正则表达式
程序员文章站
2022-06-24 08:57:22
原子 原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子。 常见的原子类型: 1. 普通字符作为原子 2. 非打印字符作为原子 3. 通用字符作为原子 4. 原子表 元字符 元字符是正则表达式中具有一些特殊含义的字符,比如重复N此前面的字符等。 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()
上一篇: 青少儿书画 正式版发布
下一篇: Vue中jsx的最简单用法
推荐阅读
-
python制作爬虫爬取京东商品评论教程
-
Python 'takes exactly 1 argument (2 given)' Python error
-
python 正则表达式 过滤字符串两边的字符,类似strip功能 练习题
-
《精通Python网络爬虫》第18章 博客类爬虫项目代码
-
Seaeast&collection——Object-oriented Programming(Java)_No.1 Java正则表达式Smalltalk
-
Python 正则表达式入门(中级篇)
-
python利用正则表达式提取字符串
-
Python 正则表达式入门(初级篇)
-
Python 爬虫多线程详解及实例代码
-
python 根据正则表达式提取指定的内容实例详解