一、re模块使用流程
1.方法一
r_list=re.findall('正则表达式',html,re.s)
2.方法二(常用)
#创建正则编译对象
pattern=re.compile('正则表达式',re.s)
re_list=pattern.findall(html)
二、正则表达表达式元字符
元字符 | 含义 |
. | 任意一个字符(不包括\n) |
\d | 一个数字 |
\s | 空白字符 |
\S | 非空白字符 |
[] | 包含[]内容 |
* | 出现0次或多次 |
+ | 出现1次或多次 |
例如
写出一个匹配任意一个字符的正则表达式
import re
pattern=re.compile('.',re.s)
三、贪婪匹配和非贪婪匹配
1.贪婪匹配 : .*
在整个表达式匹配成功的情况下,尽可能多的匹配
2.非贪婪匹配: .*?
在整个表达式匹配成功的情况下,尽可能少的匹配
import re
html='''
<html>
<div><p>九霄龙吟惊天变</p></div>
<div><p>风云际会浅水游</p></div>
</html>
'''
#贪婪匹配
#pattern =re.compile('<div><p>.*</p></div>',re.S)
#r_list=pattern.findall(html)
#print(r_list)
#非贪婪匹配
pattern = re.compile('<div><p>(.*?)</p></div>',re.S)
r_list=pattern.findall(html)
print(r_list)
四、正则表达式分组
1.在网页中,想要什么内容,·就加()
2.先按整体正则匹配,然后再提取分组()中的内容
如果有2个及以上分组(),则结果中以元组形式显示[(),(),()]
案例 1
从以下html代码啊结构中完成如下内容信息的提取
1、[(‘Tiger’),'Two...',(‘Rabbit’,‘Small...’)]
2.
动物名称:Tiger
动物描述:Two tigers two tigers run fast
动物名称:Rabbit
动物描述:Small white rabbit white and white
页面结构如下
<div class="animal">
<p class="name">
<a title="Tiger"></a>
</p>
<p class="content">
Two tigers two tigers run fast
</p>
</div>
<div class="animal">
<p class="name">
<a title="Rabbit"></a>
</p>
<p class="content">
Small white rabbit white and white
</p>
</div>
见re_groups
import re
html='''
<html>
<div class="animal">
<p class="name">
<a title="Tiger"></a>
</p>
<p class="content">
Two tigers two tigers run fast
</p>
</div>
<div class="animal">
<p class="name">
<a title="Rabbit"></a>
</p>
<p class="content">
Small white rabbit white and white
</p>
</div>
</html>
'''
pattern=re.compile('<div class="animal">.*?title="(.*?)".*?'
'class="content">(.*?)</p>',
re.S)
r_list=pattern.findall(html)
for rt in r_list:
print('动物名称',rt[0].strip())
print('动物描述', rt[1].strip())
结果展示:
字符串常用方法:
strip() :去除空格
split(): 分割
replace:替换
练习
爬取猫眼电影信息:猫眼电影-榜单-top100榜
第一步
猫眼电影-第1页.html
猫眼电影-第2页.html
..........
第二步
1.提取数据:电影名称、主演、上映时间
2.先打印输出,再写入到本地
总结
请求模块(urllib.request)
request=request.Request(url,headers)
response=request.urlopen(request)
html=res.read().decode('utf-8')
编码模块(urllib.parse)
urlencode({dict})
urlencode({'wd':'美女',‘pn’:20})