"""
文本处理是当下计算机处理的主要任务,从文本中找到某些有用的信息,
挖掘出某些信息是现在计算机程序大部分所做的工作。而python这中轻量型、小巧的语言包含了很多处理的函数库,
这些库的跨平台性能很好,可移植性能很强。
在Python中re模块提供了很多高级文本模式匹配的功能,以及相应的搜索替换对应字符串的功能。
"""
"""
正则表达式符号和特殊字符
re1|re2 -----> 匹配正则表达式的re1或者re2
. -----> 可以匹配任何字符,但是除了换行符之外
^ -----> 匹配字符创的开始 ^Dear
$ -----> 匹配字符串的结尾 /bin/*sh$
* -----> 匹配前面出现的正则表达式零次或者多次 [A-Za-z0-9]*
+ -----> 匹配前面出现的正则表达式一次或者多次 [A-Za-z0-9]+ [a-z]+\.com
? -----> 匹配前面出现的正则表达式零次或者一次 goo?
{N} -----> 匹配前面出现的正则表达式N次 [0-9]{N}
{M,N} -----> 匹配重复出现M次到N次的正则表达式 [0-9]{3,5}
[...] -----> 匹配字符组中出现的任意一个字符 [aeiou]
[...x-y...]-----> 匹配从字符x到y中的任意一个字符 [0-9],[A-Za-z]
[^...] -----> 不匹配此字符集中出现的任何一个字符,包括某个范围的字符 [^A-Za-z0-9_]
(*|+|?|{})? -----> 用于上面出现的任何"非贪婪版本"重复匹配的次数符号 .*?[a-z]
(...) -----> 匹配封闭括号中正则表达式(RE),并保存为字数组 ([0-9]{3})?,f(oo|u)bar
"""
import re p=re.compile('ab*'); print p; r1=r'\d{3,4}-?\d{8}'; print re.findall(r1,'010-12345678'); print re.findall(r1,'010-00000000'); r2=re.compile(r'[Cc][Ss][Vv][Tt]'); r3=re.compile(r'csvt',re.I); print r3.findall('cSvT'); test_r=r'(abc/[0-9]{8,8}$)'; print re.findall(test_r,'abc/12345678');
"""
使用正则表达式进行一个网页爬虫
"""
headers={ 'Connection': 'Keep-Alive', 'Accept': 'text/html, application/xhtml+xml, */*', 'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko' }; import urllib2 url='http://blog.csdn.net/berguiliu'; req=urllib2.Request(url); req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'); Browser=urllib2.urlopen(req); data = Browser.read(); re_blog_list=re.compile(r'href="(/berguiliu/article/details/[0-9]{8,8})">'); url_list=re.findall(re_blog_list,data); import cookielib def makeMyOpener(head): cj=cookielib.CookieJar(); opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)); header=[] for key, value in head.items(): elem=(key, value) header.append(elem) opener.addheaders=header; return opener oper = makeMyOpener(headers); uop = oper.open('http://www.baidu.com/', timeout = 1000); data = uop.read(); print data; import time; for subUrl in url_list: new_Url='http://blog.csdn.net'+subUrl; print new_Url; oper = makeMyOpener(headers); uop = oper.open(new_Url, timeout = 1000); data = uop.read(); time.sleep(3)
原文:http://blog.csdn.net/berguiliu/article/details/44966521