使用Tkinter + urllib + requests 实现自动下载百度图片

整体步骤分三步:

1.设计tkinter页面布局

2.获取图片链接列表

3.执行下载操作

先放代码

import urllib
import re
import requests

try:
    from tkinter import *
except ImportError:  #Python 2.x
    PythonVersion = 2
    from Tkinter import *
    from tkFont import Font
    from ttk import *
    from tkMessageBox import *

class GetbaiduPic:

    def __init__(self):
        self.root = Tk()
        self.root.title('自动下载百度图片')
        self.root.geometry('800x700')

        #定义第一个输入框  输入关键字
        self.var = StringVar()
        self.flm = Frame(self.root).pack()
        Label(self.flm,text='请输入关键字').pack()
        self.e = Entry(self.flm,validate='key',textvariable=self.var).pack()

        #定义第二个输入框  输入获取张数
        self.var2 = StringVar()
        self.flm2 = Frame(self.root).pack()
        Label(self.flm2,text='请输入获取的张数,输入60的倍数').pack()
        self.e2 = Entry(self.flm2,validate='key',textvariable=self.var2).pack()

        #定义第三个输入框  输入保存路径
        self.var3 = StringVar()
        self.flm3 = Frame(self.root).pack()
        Label(self.flm3,text='请输入要保存的路径,例如(D:\pic\),当前目录必须存在').pack()
        self.e3 = Entry(self.flm3,validate='key',textvariable=self.var3).pack()

        #设置button,回调下载函数
        self.button = Button(self.root,text='开始',command=self.print_contone).pack()

        #设置输入内容函数,返回内容
        self.S = Scrollbar(self.root)
        self.l = Text(self.flm2,width=100,height=20)
        self.S.pack(side=RIGHT, fill=Y)
        self.l.pack(side=RIGHT, fill=Y)
        self.S.config(command=self.l.yview)
        self.l.config(yscrollcommand=self.S.set)
    #获取图片列表
    def gethtml(self):
        self.jpg_list = []
        rn = '60'#获取张数 最多只能取60
        pn = 0#开始取的数0为0-30张 120
        word = self.var.get()
        coneton = word.encode('utf-8') #转换成str类型
        try:
            for i in range(self.b):#获取输入的数字进行循环判断取多少条数据
                url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result'+'&queryWord='+ coneton + '&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&word=' + coneton +'&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&pn='+ str(pn) +'&rn='+ rn +'&gsm=1e&1528178649573='
                page = urllib.urlopen(url)
                html = page.read()
                pattin_pic = '"thumbURL":"(.*?)",'
                pic_list = re.findall(pattin_pic,html,re.S)
                for i  in  pic_list:
                    self.jpg_list.append(i)
                pn += 60 #每次修改为60的倍数
            return self.jpg_list
        except:
            print "没有获取到图片信息,请排查原因"

    #执行下载操作
    def down_pic(self):
        a = self.var2.get()#在这一步获取输入的值
        self.b = int(a)/60#判断b需要遍历几次,遍历值为60的倍数
        path = self.var3.get()
        newpath = path.encode('utf-8')#处理为UTF-8格式
        self.print_content = []
        self.gethtml()
        for i,picurl in enumerate(self.jpg_list):#加下标循环 图片列表
            try:
                pic = requests.get(picurl, timeout=10)
                string = newpath + str(i + 1) + '.jpg'#当前目录新建文件夹,并重新命名
                with open(string,'wb') as f:#开始执行下载操作
                    f.write(pic.content)
                    # print '成功下载第%s张图片:%s' %(str(i + 1),str(picurl))
                    self.print_content.append('成功下载第%s张图片:%s' %(str(i + 1),str(picurl))+ '\n')
            except Exception as e:
                # print '下载第%s张图片失败:%s' %(str(i + 1),str(picurl))
                self.print_content.append('下载第%s张图片失败:%s' %(str(i + 1),str(picurl))+ '\n')
                print e
                continue

    def print_contone(self):
        self.down_pic()
        for itam in self.print_content:
            self.l.insert(END,itam)

a = GetbaiduPic()
# a.down_pic()
mainloop()

查看百度图片页面,发现获取数据是请求的一个Url,每次下拉页面,变更的参数只有rn和pn

故推断出rn参数为每次获取的张数,最多支持获取60张,pn代表开始获取的张数,也可以理解为开始的索引(例如为pn=30,那就是取31张以后的图片)



下一步就是获取返回数据中的图片url,请求request URl,发现返回数据中非常有规律,都是在thumbURL里面,那就非常简单了,直接正则匹配,获取图片链接


获取到图片链接后,就开始执行 下载图片操作了, 直接使用requests.get 遍历下载图片,并保存到对应文件夹,至此,下载图片功能 大功告成啦~~

在下一步就是tk的布局了,这里也非常简单,就不多赘述了~~

最终效果图:


以上,如果有哪里表述的不清楚,可以直接留言,看到后会第一时间回复~

Abstract Describes the Tkinter widget set for constructing graphical user interfaces (GUIs) in the Python programming language. This publication is available in Web form1 and also as a PDF document2. Please forward any comments to tcc-doc@nmt.edu. Table of Contents 1. What is Tkinter?.......................................................................................................................3 2. A minimal application..............................................................................................................3 3. Definitions..............................................................................................................................4 4. Layout management.................................................................................................................5 4.1. The .grid() method....................................................................................................5 4.2. Other grid management methods...................................................................................6 4.3. Configuring column and row sizes.................................................................................7 4.4. Making the root window resizeable................................................................................8 5. Standard attributes...................................................................................................................8 5.1. Dimensions...................................................................................................................9 5.2. The coordinate system...................................................................................................9 5.3. Colors...........................................................................................................................9 5.4. Type fonts...................................................................................................................10 5.5. Anchors......................................................................................................................11 5.6. Relief styles.................................................................................................................12 5.7. Bitmaps.......................................................................................................................12 5.8. Cursors.......................................................................................................................12 5.9. Images........................................................................................................................14 5.10. Geometry strings........................................................................................................14 5.11. Window names...........................................................................................................15 5.12. Cap and join styles.....................................................................................................15 5.13. Dash patterns.............................................................................................................16 5.14. Matching stipple patterns............................................................................................16 6. The Button widget................................................................................................................17 7. The Canvas widget................................................................................................................19 7.1. Canvas coordinates......................................................................................................20 7.2. The Canvas display list................................................................................................20 7.3. Canvas object IDs........................................................................................................21 7.4. Canvas tags................................................................................................................21 1http://www.nmt.edu/tcc/help/pubs/tkinter/ 2http://www.nmt.edu/tcc/help/pubs/tkinter/tkinter.pdf 1 Tkinter reference New Mexico Tech Computer Center 7.5. CanvastagOrId arguments......................................................................................21 7.6. Methods on Canvas widgets........................................................................................21 7.7. Canvas arc objects.......................................................................................................26 7.8. Canvas bitmap objects.................................................................................................28 7.9. Canvas image objects..................................................................................................29 7.10. Canvas line objects.....................................................................................................29 7.11. Canvas oval objects....................................................................................................31 7.12. Canvas polygon objects..............................................................................................32 7.13. Canvas rectangle objects.............................................................................................34 7.14. Canvas text objects.....................................................................................................35 7.15. Canvas window objects..............................................................................................36 8. The Checkbutton widget......................................................................................................37 9. The Entry widget..................................................................................................................40 9.1. Scrolling an Entry widget............................................................................................43 10. The Frame widget................................................................................................................43 11. The Label widget................................................................................................................44 12. The LabelFrame widget......................................................................................................46 13. The Listbox widget............................................................................................................48 13.1. Scrolling a Listbox widget........................................................................................52 14. The Menu widget..................................................................................................................52 14.1. Menu item creation (coption) options.........................................................................55 14.2. Top-level menus.........................................................................................................56 15. The Menubutton widget......................................................................................................57 16. The Message widget............................................................................................................59 17. The OptionMenu widget.......................................................................................................60 18. The PanedWindow widget....................................................................................................61 18.1. PanedWindow child configuration options...................................................................63 19. The Radiobutton widget....................................................................................................64 20. The Scale widget................................................................................................................67 21. The Scrollbar widget........................................................................................................70 21.1. The Scrollbarcommand callback............................................................................72 21.2. Connecting a Scrollbar to another widget................................................................73 22. The Spinbox widget............................................................................................................73 23. The Text widget..................................................................................................................78 23.1. Text widget indices...................................................................................................80 23.2. Text widget marks....................................................................................................81 23.3. Text widget images...................................................................................................82 23.4. Text widget windows...............................................................................................82 23.5. Text widget tags.......................................................................................................82 23.6. Setting tabs in a Text widget......................................................................................83 23.7. The Text widget undo/redo stack..............................................................................83 23.8. Methods on Text widgets..........................................................................................84 24. Toplevel: Top-level window methods..................................................................................91 25. Universal widget methods.....................................................................................................93 26. Standardizing appearance...................................................................................................101 26.1. How to name a widget class......................................................................................102 26.2. How to name a widget instance.................................................................................102 26.3. Resource specification lines.......................................................................................102 26.4. Rules for resource matching......................................................................................103 27. Connecting your application logic to the widgets...................................................................104 28. Control variables: the values behind the widgets...................................................................104 29. Focus: routing keyboard input.............................................................................................106 New Mexico Tech Computer Center Tkinter reference 2 30. Events................................................................................................................................107 30.1. Levels of binding......................................................................................................108 30.2. Event sequences.......................................................................................................109 30.3. Event types..............................................................................................................109 30.4. Event modifiers........................................................................................................110 30.5. Key names...............................................................................................................111 30.6. Writing your handler: The Event class......................................................................113 30.7. The extra arguments trick..........................................................................................115 30.8. Virtual events...........................................................................................................116 31. Pop-up dialogs....................................................................................................................116 31.1. The tkMessageBox dialogs module..........................................................................116 31.2. The tkFileDialog module.....................................................................................118 31.3. The tkColorChooser module.................................................................................119
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值