正则表达式在python中的应用
一、常用符号
. :匹配任意字符,换行符\n除外
* :匹配前一个字符0次或无限次
? :匹配前一个字符0次货1次
.* :贪心算法
.*? :非贪心算法
() :括号内的数据作为结果返回
二、常用方法
findall:匹配所有符合规律的内容,返回包含结果的列表
Search:匹配并提取第一个符合规律的内容,返回一个正则表达式对象(object)
Sub :替换符合规律的内容,返回替换后的值
三、代码示例
1 # coding=utf-8
2 import re
3 secret_code = "hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse"
4
5 # .的使用
6 a = "xy123"
7 b = re.findall("x..",a)
8 c = re.findall("x...",a)
9 print b
10 print c
11 # .就是一个占位符,几个.就表示几个字符
12
13
14 # *的使用
15 a = "xyxy123"
16 b = re.findall("x*",a)
17 print b
18
19 # ?的使用
20 a = "xy1x2x3"
21 b = re.findall("x?",a)
22 print b
23
24 # .*的使用举例
25 b = re.findall("xx.*xx",secret_code)
26 print b
27 c = re.findall("xx.*?xx",secret_code)
28 print c
29
30 # ()的使用
31 b = re.findall("xx(.*?)xx",secret_code)
32 print b
33 for str in b:
34 print str
35
36
37 # re.S 使.能包含\n
38 s = '''sdfxxhello
39 xxfsdfxxworldxxasdf'''
40 d = re.findall("xx(.*?)xx",s,re.S)
41 print d
42
43 # 对比findall与search的区别
44 s2 = "asdfxxIxx123xxlovexxdfd"
45 f = re.search("xx(.*?)xx123xx(.*?)xx",s2).group(1)
46 print f
47 f2 = re.findall("xx(.*?)xx123xx(.*?)xx",s2)
48 print f2[0][0]
49
50 # sub的使用
51 s2 = "123abcssfasdfas123"
52 output = re.sub("123(.*?)123","123789123",s2)
53 print output
54
55 # 匹配纯数字
56 s2 = "asdfasf1234567fasdfas"
57 b = re.findall("(\d+)",s2)
58 print b
四、制作简单文本爬虫--爬取百度图片首页分类图片并下载
实现原理:
1、保存网页代码
2、Python读文件加载代码
3、正则表达式提取图片网址
4、下载图片
代码如下所示:
1 # coding=utf-8 2 import re 3 import requests 4 #读取源代码文件 5 f = open("baidu.txt","r") 6 html = f.read(); 7 f.close() 8 9 #匹配图片网址 10 11 #先爬大再爬小 12 url = re.findall('<div class="wrapper_detail_box">(.*?)<div class="wrapper_footer_box">',html,re.S)[0] 13 pic_url = re.findall('img src="(.*?)" class="img_pic_layer"',url) 14 i = 0 15 for each in pic_url: 16 print 'now downloading:' + each 17 #获取图片 18 pic = requests.get(each) 19 20 #保存图片 21 fp = open("pic\\"+str(i)+".jpg","wb") 22 fp.write(pic.content) 23 fp.close() 24 i += 1