代码如下:
# -*- coding: utf-8 -*
import urllib.request,re
url='http://tieba.baidu.com/p/5665019988/'
page=urllib.request.urlopen(url,timeout = 2)
html=page.read()
html=html.decode('utf-8') #因为百度不是utf-8,故需要转码
reg=r'src="(http://imgsrc.baidu.com/forum/w%3D580/sign=[^\s]*?\.jpg)"' #此处指定是http://imgsrc.baidu.com/forum/w%3D580/sign=地址开头的图片,并作为字符串
imger=re.compile(reg) # re.compile()函数用于编译正则表达式,生成一个‘正则表达式对象’
imglist=re.findall(imger,html) # re.findall()在字符串中找到‘正则表达式对象’所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
n=0
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,r'C:\\Users\\Administrator\\PycharmProjects\\untitled\\venv1\\image\\%s.jpg'%n)
n=n+1
结果如下:
小结:
1、正则表达式:
'.'匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符;
'*'匹配前一个字符零次到多次, '+'则是一次或多次,'?'匹配一次或零次,'[^\s]'匹配一个非空字符,'*?'常用搭配,匹配前一个或多个字符(可以重复匹配);
'\'+'字符'构成转义字符,'\'+'元字符或转义字符'使其无效化,r只是使转义字符失效;
2、'%'格式化字符串,最基本的用法是将 %后面的值 替换 格式符%_ ;%s指字符串,%d指整数;
3、在保存到某目录之前,要先检查一下目录是否存在,不存在则建立;
4、urllib.urlopen()方法用于打开一个URL地址,通常还要加read()获取数据;urllib.urlretrieve()将数据下载到本地。