一、正则表达式
python正则常用的函数和方法
compile(pattern,flags=0) 对正则表达式pattern进行编译,flags是可选标识符,并返回一个regex对象
match(pattern,string,flags=0) 尝试用正则表达式模式pattern匹配字符串string,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None
search(pattern,string[,flags]) 在字符串string中搜索正则表达式模式pattern的第一次出现,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None
findall(pattern,string[,flags]) 在字符串string中搜索正则表达式模式pattern的所有(非重复)出现;返回一个匹配对象的列表
finditer(pattern,string[,flags]) 和findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
split(pattern,string,max=0)根据正则表达式pattern中的分隔符把字符串string分隔为一个列表,返回成功匹配的列表,最多分隔max次(默认是分隔所有匹配的地方)
sub(pattern,repl,string,max=0) 把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值没有给出,则对所有匹配的地方进行替换
group(num=0) 返回全部匹配对象(或指定编号是num的子组)
groups() 返回一个包含全部匹配的子组的元组(如果没有匹配成功,就返回一个空元组)
==================================================================================
import rem = re.match('foo','foo') #match 函数尝试从字符串开头开始对模式进行匹配if m is not None:m.group()# search() 在一个字符串中查找一个模式:search检查参数字符串任意位置的地方与正则表达式模式的匹配情况,与match(),不同m = re.search('foo','seafood') # 如果用match() 则会匹配失败,返回Noneif m is not None:m.group() #用search成功匹配
m = re.match('(\w\w\w)-(\d\d\d)','abc-123')m.group() #所有匹配部分#'abc-123'm.group(1)#'abc'm.group(2)#'123'
m.groups() #获得包含所有匹配子组的元组
#('abc','123')
re.findall('car','carry the barcardi to the car') #findall返回一个匹配列表['car', 'car', 'car']
re.sub('X','Mr.Smith','attn:X\n\nDear X,\n') # sub返回替换后的字符串# 'attn:Mr.Smith\n\nDear Mr.Smith,\n're.subn('X','Mr.Smith','attn:X\n\nDear X,\n')#subn返回替换后的字符串,和替换次数的一个元组#('attn:Mr.Smith\n\nDear Mr.Smith,\n', 2)
python小爬虫——我的第一个实例
#! /usr/bin/env python# coding=utf-8 ###到豆瓣电影列表抓去大于等于8分的电影##/tag/%E5%8A%A8%E4%BD%9C?start=0&type=Timport urllib2import reimport sys# 获取当前系统编码格式type = sys.getfilesystemencoding()j = 0for i in range(0, 5000, 20):url = '/tag/%E5%8A%A8%E4%BD%9C?'hash = 'start=%d&type=T' % iurl = url + hashprint(url)# 读取url内容content = urllib2.urlopen(url).read()# 转换编码content = content.decode("UTF-8").encode(type)# 读取电影名称match = re.findall(r'<div\s+class="pl2"><a.+?>(.+?)/\s*<span.+?<\/a>', content)# 读取分数match2 = re.findall(r'<span\s+class="rating_nums">([0-9.]+)<\/span>', content)# 压缩到一个列表zipc = zip(match, match2)# 打开文档f = open('douban.txt', 'a')# 写入文件for name in zipc:#大于8分的电影if float(name[1])>=8:f.write(name[0])f.write(name[1])f.write('\n')j = j + 1print name[0]print j print ('总共抓取电影数据'+ str(j) +'条').decode("UTF-8").encode(type)print 'done'f.close()
得到的结果大致如下:
飓风营救 8.1
蝙蝠侠:黑暗骑士崛起 8.4
碟中谍4 8.1
谍影重重 8.3
谍影重重3 8.6
蝙蝠侠:黑暗骑士 9.4
速度与激情5 8.8
黑客帝国 8.3
V字仇杀队 8.7
复仇者联盟 8.7
007:大战皇家赌场 8.0
变脸 8.3
生化危机5:惩罚 8.3
敢死队 8.9
007:大破量子危机 8.4
英雄本色 8.6
十月围城 8.1
通缉令 9.2
死亡飞车 8.4
黑客帝国3:矩阵革命 8.2
无间道 8.7
空中监狱 8.0
加勒比海盗 8.4
被解救的姜戈 8.5
阿凡达 8.7
让子弹飞 8.8
新龙门客栈 8.3
纵横四海 8.6
源代码 8.3
X战警:第一战 8.0
铁甲钢拳 8.1
变形金刚 8.0
搏击俱乐部 9.1
虎胆龙威 8.1
角斗士 8.2
Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)...