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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
在Python3中初学者应会的一些基本的提升效率的小技巧
Mar 31 Python
python中OrderedDict的使用方法详解
May 05 Python
Python 结巴分词实现关键词抽取分析
Oct 21 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
详解Python中的各种转义符\n\r\t
Jul 10 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
python numpy数组中的复制知识解析
Feb 03 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
python中四舍五入的正确打开方式
Jan 18 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
pw的一个放后门的方法分析
2007/10/08 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
实现PHP搜索加分页
2016/10/12 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
2018/03/30 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
用javascript实现自定义标签
2007/05/08 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
opencv实现图像平移效果
2021/03/24 Python
喝酒驾驶检讨书
2014/10/01 职场文书
实用求职信模板范文
2019/05/13 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python