python妹子图简单爬虫实例


Posted in Python onJuly 07, 2015

本文实例讲述了python妹子图简单爬虫实现方法。分享给大家供大家参考。具体如下:

#!/usr/bin/env python
#coding: utf-8
import urllib
import urllib2
import os
import re
import sys
#显示下载进度
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 downloadImg(html, num, foldername):
  picpath = '%s' % (foldername) #下载到的本地目录
  if not os.path.exists(picpath): #路径不存在时创建一个
    os.makedirs(picpath)
  target = picpath+'/%s.jpg' % num
  myItems = re.findall('<p><a href="http:\/\/www.mzitu.com/.*?" ><img src="(.*?)" alt=".*?" /></a></p>',html,re.S)
  print 'Downloading image to location: ' + target
  urllib.urlretrieve(myItems[0], target, schedule)
#正则匹配分页
def findPage(html):
  myItems = re.findall('<span>(\d*)</span>', html, re.S)
  return myItems.pop()
#正则匹配列表
def findList(html):
  myItems = re.findall('<h2><a href="http://www.mzitu.com/(\d*)" title="(.*?)" target="_blank">.*?</a></h2>', html, re.S)
  return myItems
#总下载
def totalDownload(modelUrl):
  listHtml5 = getHtml(modelUrl)
  listContent = findList(listHtml)
  for list in listContent:
    html = getHtml('http://www.mzitu.com/' + str(list[0]))
    totalNum = findPage(html)
    for num in range(1, int(totalNum)+1):
      if num == 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从而达到整站爬取。
  for model in range(1, int(findPage(listHtml))+1):
    if model == 1:
      modelUrl = 'http://www.mzitu.com/model'
      totalDownload(modelUrl)
    else:
      modelUrl = 'http://www.mzitu.com/model/page/' + str(model)
      totalDownload(modelUrl)
  print "Download has finished."

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
pandas的排序和排名的具体使用
Jul 31 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
Python基于xlutils修改表格内容过程解析
Jul 28 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
使用Python解决图表与画布的间距问题
Apr 11 Python
python操作redis的方法
Jul 07 #Python
python生成IP段的方法
Jul 07 #Python
Python的多态性实例分析
Jul 07 #Python
Python中的urllib模块使用详解
Jul 07 #Python
Python实现图像几何变换
Jul 06 #Python
Python统计日志中每个IP出现次数的方法
Jul 06 #Python
python统计日志ip访问数的方法
Jul 06 #Python
You might like
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php中static和const关键字用法分析
2016/12/07 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
在JavaScript中调用Java类和接口的方法
2016/09/07 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
对python使用http、https代理的实例讲解
2018/05/07 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
详解python中index()、find()方法
2019/08/29 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
python中count函数简单的实例讲解
2020/02/06 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
优秀班干部事迹材料
2014/01/26 职场文书
我的求职择业计划书
2014/04/04 职场文书
球队口号
2014/06/18 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
python APScheduler执行定时任务介绍
2022/04/19 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL