正则表达式:将数据进行筛选的一种表达式
原子是正则表达式中最基本的组成单位,每个表达式中至少含有一个原子,
1.普通字符作为原子,2.非打印字符作为原子,3.通用字符作为原子,4.原子表
使用正则表达式需先导入re模块
re.search(条件,范围)
>>> import re >>> pat = 'yue' >>> string = 'http://yum.iqianyue.com' >>> rse = re.search(pat,string) >>> print(rse) <re.Match object; span=(16, 19), match='yue'>
import re tj = 'hel[l,1,I]o' fw1 = 'axuawnxaihel1o' fw2 = 'axuawnxaihelIo' fw3 = 'axuawnxaihello' res1 = re.search(tj,fw1) res2 = re.search(tj,fw2) res3 = re.search(tj,fw3) print(res1,res2,res3)
#条件可以在【】中任意一个
/w:匹配非特殊字符 _______/W:匹配特殊字符
/d:匹配十进制数 /D:匹配非十进制数
/s:匹配任意空白字符 /S:匹配非空白字符
元字符:正则表达式中具有特殊意义的字符,比如重复n此前面的字符
.:匹配任意字符
^:匹配字符串开始的位置,在原子表里面代表非
$:匹配字符串结束的位置
*:匹配0次,1次,多次的字符串
?:匹配0次或一次
+:匹配一次或多次
x{自定义}:匹配x自定义的次数
{n,}:至少出现了n次
{n,m}至少出现 了n次,最大出现了m次
|:模式选择符,或
():提取某一内容
模式修正符:在不改变 正则表达式的情况下改变正则表达式的含义
I(i):忽略表达式不区分大小写
M:实现多行匹配
L:本地化识别匹配
U:根据uncode字符解析字符
S:让.匹配换行符
import re tj = 'python' fw1 = 'axuawnxPyThonaihel1o' res1 = re.search(tj,fw1,re.I) print(res1)
懒惰模式,贪婪模式,全区搜索
.*:贪婪模式,搜索到第一个条件然后到最后一个条件,如果中间满足条件则不停止
import re tj = 'p.*y' fw1 = 'atyupxuawnxPyThonaihel1oy' res1 = re.search(tj,fw1,re.I) print(res1) #<re.Match object; span=(4, 25), match='pxuawnxPyThonaihel1oy'>
/*?:懒惰模式:跟贪婪模式相对,中间出现满足条件则直接终结
import re tj = 'p.*?y' fw1 = 'atyupxuawnxPyThonaihel1oy' res1 = re.search(tj,fw1,re.I) print(res1) #<re.Match object; span=(4, 13), match='pxuawnxPy'>
re.match(条件,范围):开头必须为条件否则直接为None,跟懒惰模式差不多
re.compile(条件).findall(范围):全局搜索,将范围内所有满足条件的全部列举出来
import re tj = 'p.*?y' fw1 = 'ptyupxuawnxPyThonaihel1oy' res1 = re.compile(tj).findall(fw1) print(res1) #['pty', 'pxuawnxPy']
匹配一个.com或.cn的网址
import re pa= "[a-zA-Z]+://[^s]*[.com|.cn]" fw = '<a href="http://www.baidu.com">head</a>' w = re.compile(pa).findall(fw) print(w) #[a-zA-Z]+是指http必须出现一次 #[^s]是指从开头非空白字符 #:*是指匹配多个字符串 #[.com|.cn]是指二选一
爬取网站qq群号
import urllib.request import re tes = '<e>(.*?)</e>' fw = urllib.request.urlopen('http://sd.huatu.com/zt/qqun/').read() p1 =re.compile(tes).findall(str(fw)) print(p1)
在爬取数据时,数据必须进行编码
例如data =
urllib.request.urlopen("http://www.ttmeishi.com/QQqun/").read()
data = data.decode('编码')
urllib模块基础
urlretrieve(url,filename=本地地址):将网站爬取到本地
urlcleanup():将urlretrieve产生的本地缓存清除
info:将基本环境的信息展现出来
getcode:获取网站的状态码
geturl:获取网站的网址