Python学习笔记-2(urllib、re)
来源:互联网 发布:xgpush java开发 编辑:程序博客网 时间:2024/04/30 23:36
经过Python学习之路-1,学习了Python的基础语法,加上用os模块写了一些代替批处理的文件管理工具,这次打算依葫芦画瓢,写一个爬虫(以前用java写过,据说python写起来很爽啊)
这次的参考博客是:Python爬虫入门
一、简单爬虫爬取网页数据:
values ={{"name":"li"}};urllib.urlencode(values); #1.设置post表单值(要URL编码)headers={"user-agent":"xxx"}; #2.Headers值(User-Agent标示浏览器、req = urllib2.Request(url,requestData,headers)#3.构造Rquestresp = urllib2.urlopen(request/url )#4.发送请求,拿到response对象: data = resp.read() #5.然后通过read()拿到数据
二、解析数据
爬出了数据,那么下一步就是解析数据,拿到自己想要的内容,有专门的html分析工具,也可以用正则表达式。正则表达式语法就不说了,着重提一下分组和贪婪:
分组: 整个regex表达式为第0组,从左到右,第几个“(”就为第几个分组
例子: “(123)”:第0分组,第1分组 匹配的都是”123”. \{num} #代表取第num个分组的值
贪婪匹配: 4个量词
“{m,n}”:匹配m~n次
“*”:代表匹配>=0次
“+”:代表>=1次
“?”:代表匹配0或1次
默认都是贪婪的,尽可能多的匹配,量词后面加”?”代表非贪婪模式
例子:”\d{3,5}?” :尽可能的匹配3次
简单使用regex 匹配数据:
regex = "<a(.*) href=(.*?) (.*)>" #正则表达式,用来拿到超链接地址pattern = re.compile(regex); #pattern一定要先compile()resultObject = re.match(pattern,data); #match以0位置开始匹配,若匹配失败,则返回Nonesrcs = resultObject.group(2);
match的另一种写法:resultObject = pattern.match(data);
re.compile(string[,flag]),其中flag是匹配模式,可同时生效,比如re.I | re.M。
• re.I: 忽略大小写,(全拼:IGNORECASE)(括号内是完整写法,下同) • re.M: 多行模式,改变'^'和'$'的行为,(全拼:MULTILINE) • re.S: 点任意匹配模式,改变'.'的行为,(全拼:DOTALL) • re.L: 使\w\W\b\B\s\S,取决于当前区域设定,(全拼:LOCALE) • re.U: 使\w\W\b\B\s\S\d\D,取决于unicode定义的字符属性,(全拼:UNICODE) • re.X: 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。(全拼:VERBOSE)
以下为匹配所用函数
re.match(pattern, string[, flags]);#只在0位置开始匹配re.search(pattern, string[, flags]);#全局匹配re.split(pattern, string[, maxsplit])#将string分割后返回列表re.findall(pattern, string[, flags])#以列表形式返回全部能匹配的子串re.finditer(pattern, string[, flags])#返回顺序Match对象的迭代器re.sub(pattern, newstring, string[, count])#替换匹配到的字符串re.subn(pattern, newstring, string[, count])#返回替换次数count
resultObject(match对象)是一次匹配的结果,包含了很多关于此次匹配的信息
Mathch对象的属性:
1.string: 匹配时使用的文本。2.re: 匹配时使用的Pattern对象。3.pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。4.endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。5.lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。6.lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
Mathch对象的方法:
1.group(num=0):获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。2.groups(default=None):以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。3.groupdict(default=None):返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。4.start(group=0):返回指定的组匹配的子串,在原string中的开始位置(子串第一个字符的索引)。注意索引是从0开始的5.end(group=0):返回指定的组匹配的子串,在原string中的结束位置(子串最后一个字符的索引+1)。6.span(group=0): 返回匹配区间[start,end]。7.expand(template): 以指定格式返回匹配到的字符串temolate: 以 \num 、\g<num> 、\g<name> 引用分组这里的"\"要转义: "\\2" 、"\\g<2>"
0 0
- Python学习笔记-2(urllib、re)
- python爬虫笔记之用re及urllib库爬取
- python 学习笔记 20171102 urllib
- Python3.x学习笔记[2.5]灵活使用urllib与re
- Python学习笔记--BeautifulSoup、urllib、threading模块
- Python urllib,urllib2包学习笔记
- Python学习笔记--正则表达式,re模块
- python中的re模块学习笔记
- python基础教程 re模块 学习笔记
- python学习笔记正则表达式re模块
- 【学习笔记】Python中的正则表达式re
- Python笔记:urllib模块
- python学习----urllib
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- Python模块学习 --- urllib
- Python模块学习 ---- urllib
- Python urllib模块学习
- Ping命令及其协议
- git clone所有远程分支
- 在 Perl 下处理时间的小技巧 strftime
- mysql 用show的方式显示表的相关信息
- LinearLayout属性orientation
- Python学习笔记-2(urllib、re)
- clear:both新用法,不再加新的标签啦
- C++11 右值引用
- React简介
- Android Studio如何快速生成get,set,tostring,构造函数
- git with gerrit 常用操作解析
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- javaBean之单相互的复制
- asp.net 计算两个日期的时间差