python抓取网页图片示例(python爬虫)


Posted in Python onApril 27, 2014
#-*- encoding: utf-8 -*-
'''
Created on 2014-4-24
@author: Leon Wong
'''
import urllib2
import urllib
import re
import time
import os
import uuid
#获取二级页面url
def findUrl2(html):
    re1 = r'http://tuchong.com/\d+/\d+/|http://\w+(?<!photos).tuchong.com/\d+/'
    url2list = re.findall(re1,html)
    url2lstfltr = list(set(url2list))
    url2lstfltr.sort(key=url2list.index)
    #print url2lstfltr
    return url2lstfltr
#获取html文本
def getHtml(url):
    html = urllib2.urlopen(url).read().decode('utf-8')#解码为utf-8
    return html
#下载图片到本地
def download(html_page , pageNo):   
    #定义文件夹的名字
    x = time.localtime(time.time())
    foldername = str(x.__getattribute__("tm_year"))+"-"+str(x.__getattribute__("tm_mon"))+"-"+str(x.__getattribute__("tm_mday"))
    re2=r'http://photos.tuchong.com/.+/f/.+\.jpg'
    imglist=re.findall(re2,html_page)
    print imglist
    download_img=None
    for imgurl in imglist:
        picpath = 'D:\\TuChong\\%s\\%s'  % (foldername,str(pageNo))
        filename = str(uuid.uuid1())
        if not os.path.exists(picpath):
            os.makedirs(picpath)               
        target = picpath+"\\%s.jpg" % filename
        print "The photos location is:"+target
        download_img = urllib.urlretrieve(imgurl, target)#将图片下载到指定路径中
        time.sleep(1)
        print(imgurl)
    return download_img

# def callback(blocknum, blocksize, totalsize):
#     '''回调函数
#     @blocknum: 已经下载的数据块
#     @blocksize: 数据块的大小
#     @totalsize: 远程文件的大小
#     '''
#     print str(blocknum),str(blocksize),str(totalsize)
#     if blocknum * blocksize >= totalsize:
#         print '下载完成'
def quitit():
    print "Bye!"
    exit(0)
    
if __name__ == '__main__':
    print '''            *****************************************
            **    Welcome to Spider for TUCHONG    **
            **      Created on 2014-4-24           **
            **      @author: Leon Wong             **
            *****************************************'''
    pageNo = raw_input("Input the page number you want to scratch (1-100),please input 'quit' if you want to quit>")
    while not pageNo.isdigit() or int(pageNo) > 100 :
        if pageNo == 'quit':quitit()
        print "Param is invalid , please try again."
        pageNo = raw_input("Input the page number you want to scratch >")
    #针对图虫人像模块来爬取
    html = getHtml("http://tuchong.com/tags/%E4%BA%BA%E5%83%8F/?page="+str(pageNo))
    detllst = findUrl2(html)
    for detail in detllst:
        html2 = getHtml(detail)
        download(html2,pageNo)
    print "Finished."
Python 相关文章推荐
python 获取本机ip地址的两个方法
Feb 25 Python
Python中Collection的使用小技巧
Aug 18 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
使用python实现knn算法
Dec 20 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
Python数据类型之Dict字典实例详解
May 07 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python模块汇总(常用第三方库)
Oct 07 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
python实现sublime3的less编译插件示例
Apr 27 #Python
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 #Python
Python设计模式之单例模式实例
Apr 26 #Python
Python设计模式之观察者模式实例
Apr 26 #Python
Python设计模式之代理模式实例
Apr 26 #Python
python中的列表推导浅析
Apr 26 #Python
Python中的Numpy入门教程
Apr 26 #Python
You might like
php桌面中心(一) 创建数据库
2007/03/11 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
鼠标图片振动代码
2006/07/06 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Python合并字符串的3种方法
2015/05/21 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
浅谈Python中的私有变量
2018/02/28 Python
对python:print打印时加u的含义详解
2018/12/15 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
10条PHP编程习惯
2014/05/26 面试题
什么是接口(Interface)?
2013/02/01 面试题
酒吧创业计划书
2014/01/18 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
法人委托书范本
2014/09/15 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript