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 相关文章推荐
Python多线程编程简单介绍
Apr 13 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python3 处理JSON的实例详解
Oct 29 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
Python实现某论坛自动签到功能
Aug 20 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
TensorBoard 计算图的查看方式
Feb 15 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
keras实现多种分类网络的方式
Jun 11 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
django跳转页面传参的实现
Sep 17 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 验证登陆类分享
2015/03/13 PHP
php获取错误信息的方法
2015/07/17 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python中p-value的实现方式
2019/12/16 Python
python内置模块collections知识点总结
2019/12/19 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
中学老师的自我评价
2013/11/07 职场文书
网吧收银员岗位职责
2013/12/14 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
公司欠款证明
2015/06/24 职场文书
实验心得体会范文
2016/01/25 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Nginx内网单机反向代理的实现
2021/11/07 Servers
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL