初学阶段,已通过urllib.request.urlopen(req)方法获取到指定url代码,想要从中获取到图片url并获取其格式,爬的是百度首页,通过Sublime Text3的HTML/CSS/JS Prettify插件将获取到的代码进行优化,个人认为设置为html后优化较整齐,根据在谷歌浏览器上按F12后左上角的“select an element in the page to inspect it”功能找到图片对应代码格式为"...<空格>src="URL"<空格>...",着手写筛选出对应URL的正则表达式:
#正则搜索到图片url
reg=r'src="(.+?)" +'
reg_img=re.compile(reg)
new_code=code.decode('utf-8') #在python3中很重要
imglist=reg_img.findall(new_code)
print(imglist)
>>>['//www.baidu.com/img/bd_logo1.png', '//www.baidu.com/img/bd_logo1.png?qua=high', '//www.baidu.com/img/baidu_jgylogo3.gif', '//www.baidu.com/img/baidu_jgylogo3.gif']
下方为输出结果,下面写从中筛选出要保存图片格式的方法:
def getType(code):
pattern=r'\.([^\.]+)$'
pattern_img=re.compile(pattern)
imglist=pattern_img.findall(code)
print(imglist[0])
return imglist[0]
>>>png
>>>png?qua=high
>>>gif
>>>gif
发现一个问题,正则按照上面所写的根据"."来区分的话,第二个图片有误,由于能力原因,尝试许多次后无法通过修改pattern来直接将第二个筛选为‘png’,因为都是三位,则筛选出返回结果前三个的字符串,即imglist[0][0:3],若存在‘jpeg’格式文件,则通过判断第四位是非为空来返回,后面在图一代码块接着写下载图片的操作:
i=0
for img in imglist:
try:
print(img)
img_type=getType(img)
urllib.request.urlretrieve('http:'+img, str(i)+'.'+img_type)
except Exception as e:
print(str(e))
i+=1
则会在当前py文件的同目录下下载‘0.png’、‘1.png’、‘2.gif’、‘3.gif’四张图片,至此本文研究的爬虫告一段落,下篇文章打算研究爬取动态网页及更广范围的信息,upup!