python妹子图简单爬虫实例
本文实例讲述了python妹子图简单爬虫实现方法。分享给大家供大家参考。具体如下:
#!/usr/bin/envpython
#coding:utf-8
importurllib
importurllib2
importos
importre
importsys
#显示下载进度
defschedule(a,b,c):
'''''
a:已经下载的数据块
b:数据块的大小
c:远程文件的大小
'''
per=100.0*a*b/c
ifper>100:
per=100
print'%.2f%%'%per
#获取html源码
defgetHtml(url):
page=urllib.urlopen(url)
html=page.read()
returnhtml
#下载图片
defdownloadImg(html,num,foldername):
picpath='%s'%(foldername)#下载到的本地目录
ifnotos.path.exists(picpath):#路径不存在时创建一个
os.makedirs(picpath)
target=picpath+'/%s.jpg'%num
myItems=re.findall('<p><ahref="http:\/\/www.mzitu.com/.*?"><imgsrc="(.*?)"alt=".*?"/></a></p>',html,re.S)
print'Downloadingimagetolocation:'+target
urllib.urlretrieve(myItems[0],target,schedule)
#正则匹配分页
deffindPage(html):
myItems=re.findall('<span>(\d*)</span>',html,re.S)
returnmyItems.pop()
#正则匹配列表
deffindList(html):
myItems=re.findall('<h2><ahref="http://www.mzitu.com/(\d*)"title="(.*?)"target="_blank">.*?</a></h2>',html,re.S)
returnmyItems
#总下载
deftotalDownload(modelUrl):
listHtml5=getHtml(modelUrl)
listContent=findList(listHtml)
forlistinlistContent:
html=getHtml('http://www.mzitu.com/'+str(list[0]))
totalNum=findPage(html)
fornuminrange(1,int(totalNum)+1):
ifnum==1:
url='http://www.mzitu.com/'+str(list[0])
html5=getHtml(url)
downloadImg(html5,str(num),str(list[1]))
else:
url='http://www.mzitu.com/'+str(list[0])+'/'+str(num)
html5=getHtml(url)
downloadImg(html5,str(num),str(list[1]))
if__name__=='__main__':
listHtml=getHtml('http://www.mzitu.com/model')
#这是其中一个模块的url,可以添加不同的模块url从而达到整站爬取。
formodelinrange(1,int(findPage(listHtml))+1):
ifmodel==1:
modelUrl='http://www.mzitu.com/model'
totalDownload(modelUrl)
else:
modelUrl='http://www.mzitu.com/model/page/'+str(model)
totalDownload(modelUrl)
print"Downloadhasfinished."
希望本文所述对大家的Python程序设计有所帮助。