新风花雪月 发表于 2018-8-16 08:02:12

python:分享美女图

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
  
import urllib
  
import urllib2
  
import os
  
import re
  
import sys
  
def trypicdir(picpath):
  
    if not os.path.exists(picpath):   #下载到的本地目录,路径不存在时创建一个
  
      os.makedirs(picpath)
  

  
#显示下载进度
  
def schedule(a,b,c):
  
    '''''
  
    a:已经下载的数据块
  
    b:数据块的大小
  
    c:远程文件的大小
  
    '''
  
    per = 100.0 * a * b / c
  
    if per > 100 :
  
      per = 100
  
    print ('%.2f%%' % per)
  

  
#获取html源码
  
def getHtml(url):
  
    page = urllib.urlopen(url)
  
    html = page.read()
  
    return html
  
#正则匹配分页
  
def findPage(html):
  
    myItems = re.findall('<span>(\d*)</span>', html, re.S)
  
    if myItems :
  
      return myItems.pop()
  
    else:
  
      return 0
  
#正则匹配列表
  
def findList(html):
  
    Items = re.findall('<span><a href="http://www.mzitu.com/(\d*)" target="_blank">(.*?)</a></span>', html, re.S)
  
    myItems=[]
  
    for i in Items:
  
      myItems.append((i))
  
    return myItems
  

  
#下载图片
  
def downloadImg(url_pic,picpath):
  
    tmppic = re.findall("http:\/\/www.mzitu.com/(.*?)$",url_pic,re.S)
  
    picfile = picpath+'/%s.jpg' % '_'.join(tmppic.split('/'))
  
    html=getHtml(url_pic)
  
    myItems = re.findall('<p><a href="http:\/\/www.mzitu.com/.*?" ><img src="(.*?)" alt=".*?" /></a></p>',html,re.S)
  
    print ('正在下载%s图片存储到本地%s..... '%(url_pic,picfile))
  
    try:
  
      urllib.urlretrieve(myItems, picfile, schedule)
  
    except:
  
      print ('下载%s图片存储到本地%s失败,请检查链接是否有问 '%(url_pic,picfile))
  

  
#单个美女连接下载
  
def getdowns(modelUrl,picpath):
  
    listHtml=getHtml(modelUrl)
  
    TotablNum=findPage(listHtml)
  
    if TotablNum != 0:
  
      for i in range(1,(int(TotablNum)+1)):
  
            downloadImg(url_pic='%s/%s'%(modelUrl,i),picpath=picpath)
  
    else:
  
      downloadImg(url_pic='%s'%(modelUrl),picpath=picpath)
  
'''
  
思路:
  
1、获取所有美女连接列表。
  
2、获取单个美女总连接数。
  
3、下载。
  
'''
  
if __name__ == '__main__':
  
    #picpath=r"F:\9tmp_pic"
  
    picpath='/tmp/pic_tmp'
  
    trypicdir(picpath=picpath)
  
    listHtml = getHtml('http://www.mzitu.com/model')    #这是其中一个模块的url,可以添加不同的模块url从而达到整站爬取。
  
    listContent = findList(listHtml)
  
    #print ("listContent:",listContent)
  
    for m in listContent:
  
      getdowns(modelUrl='http://www.mzitu.com/%s'%m,picpath=picpath)
  
    print ("恭喜,所有美女图片已经下载完成。")
页: [1]
查看完整版本: python:分享美女图