python做一个简易图片下载工具

代码有点乱,先这样

# -*- coding:utf-8 -*-
#__author__ :kusy
#__content__:文件说明
#__date__:2018/11/01 11:01

import urllib.request, urllib.parse, urllib.error
import os
import re
import time
import threading


# fileno = 0
# lock = threading.Lock()


def mkdir(dir):
    cd = os.path.abspath(dir)
    if not os.path.exists(cd):
        os.mkdir(cd)


def gethtml(url):
    page = urllib.request.urlopen(url)
    html = page.read()
    # print(html)
    return html


def getimage(html, searchwords):
    reg = r'"img":"(http:.*?\.jpg)"'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html.decode('utf-8'))
    # print(imglist)
    index_start = 0
    splitcount = round(len(imglist) / 4)
    threadlist = []
    # 开4个线程,分开同时下载
    for t in range(4):
        if index_start + splitcount > len(imglist):
            imglist_part = imglist[index_start:]
        else:
            imglist_part = imglist[index_start:index_start + splitcount]
        index_start += splitcount
        threadlist.append(threading.Thread(target=download, args=(imglist_part, searchwords, t + 1)))

    for th in threadlist:
        th.start()
    for th in threadlist:
        th.join()

def download(imglist,searchwords,threading_no):
    # global fileno
    fileno = 0
    for imgurl in imglist:
        imgurl = imgurl.replace('\\','')
        # lock.acquire()
        try:
            filename = searchwords + '-' + str(threading_no) + '-' + str(fileno)
            # print(filename + ' 获取中...')
            urllib.request.urlretrieve(imgurl,'下载图片/%s.jpg' % filename)
        # except (urllib.error.HTTPError, urllib.error.URLError):
        except Exception:
            continue
        # 打印信息放在这里是因为,如果放在前面,当前请求异常时会重复打印该信息
        print(filename + ' 获取中...')
        fileno += 1
        # lock.release()

if __name__ == '__main__':
    mkdir(u'下载图片')
    searchwords = input(u'请输入搜索内容后回车 >>> ')
    print(u'\n-----------------------文件存放在[下载图片]目录下-----------------------')
    # 指定图片来源,这里是360搜索,可以换成其他的
    myurl = "http://image.so.com/i?q=" + urllib.parse.quote(searchwords) + "&src=srp"
    html = gethtml(myurl)
    getimage(html, searchwords)
    print(u'\n-----------------------下载完毕,谢谢!!-----------------------')
    print(u'\n-----------------------CopyRight  @Kusy -----------------------')
    time.sleep(5)

执行效果

转成exe文件,运行

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java面试笔试题

JDBC中如何进行事务处理?

Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果...

18620
来自专栏闵开慧

Java自学之道环境变量设置补充

    java自学之道在第0章向大家介绍了如何配置环境变量,这里的环境变量配置只讲了path的配置,而没有讲classpath的配置,因为考虑到刚入门同学配...

390130
来自专栏小樱的经验随笔

【批处理学习笔记】第十二课:常用DOS命令(2)

 文件管理 type 显示文本文件的内容。 copy 将一份或多份文件复制到另一个位置。 del 删除一个或数个文件。 move 移动文件并重命名文件和目录。(...

30540
来自专栏Python小屋

Python操作Excel文件中多WorkSheet模拟数据库内连接查询

严格意义上来讲,是可以把Excel文件看作数据库的,C#通过OLEDB.net就可以使用SQL语句操作Excel文件中的数据。 本文代码使用Python扩展库o...

37040
来自专栏码生

shell 命令 干货

14740
来自专栏Esofar 开发日记

CentOS 7部署ASP.NET Core应用程序

网上看了一下,Linux云服务器还挺贵的,那就只好先用VMware虚拟机搭建个吧。这里我选装的Linux系统版本的是CentOS,Linux系统众多发行版之一,...

52110
来自专栏专注数据中心高性能网络技术研发

如何解压RPM包

Mellanox的驱动源码在centos7下面是使用RPM包封装的,需要解压此格式的包来获取源文件 RPM包括是使用cpio格式打包的,因此可以先转成cpio然...

90050
来自专栏H2Cloud

FF ASIO 异步消息网络框架

在前边 https://cloud.tencent.com/developer/article/1056482 我提到,针对前面使用boost asio 中遇到...

33430
来自专栏xiaoheike

maven web project打包为war包,目录结构的变化

所以这两个目录层级只是IDE为我们添加的,便于编程而添加的。Java Resource 目录是Source Folder,该目录下的资源都会被打包到:WEB-I...

61820
来自专栏Java技术分享

Idea使用技巧大全

idea 2017破解的方法在上面的网页中 很方便

97150

扫码关注云+社区

领取腾讯云代金券