爬取一只喵

首先介绍一个喵网站 http://placekitten.com 根据在后面输入尺寸,例如http://placekitten.com/456/456 就可以得到一张喵图

现在开始爬取这个网站的毛图:
step1:导入访问网页的模块urllib.request
step2:通过urllib.request.urlopen()访问网页内容
step3:读取第二步返回的对象,注意读取到的数据是二进制内容
step4 读取的文件内容存储在文件里,注意图片也是文件的内容
上代码:

import urllib.request
url = 'http://placekitten.com/456/456'
respones = urllib.request.urlopen(url)
httm = respones.read()
with open('cat.jpg','wb') as f:
    f.write(httm)

当然上述代码只是一个雏形,但也能很清晰的表达爬取网页里照片的思想。
既然已经有了上面的理论基础,我们就开始优化一下代码,可以根据用户随意输入的尺寸来获取照片,并且通过easygui来生成一个用户界
现在先介绍一下需要使用easygui模块的两个函数
1:multenterbox()
multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True)
multenterbox() 为用户提供多个简单的输入框,要注意以下几点:

如果用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项。
如果用户输入的值比选项多的话,则返回的列表中的值将截断为选项的数量。
如果用户取消操作,则返回域中的列表的值或者 None 值

import easygui as g
msg = '真实姓名,年纪,兴趣爱好'
title = '账户中心'
fields = ['真实姓名','年纪','兴趣爱好']
a = g.multenterbox(msg,title,fields)

返回结果为

image.png

里面的a就相当于values=[]
2diropenbox()
diropenbox(msg=None, title=None, default=None)

diropenbox() 函数用于提供一个对话框,返回用户选择的目录名(带完整路径哦),如果用户选择 “Cancel” 则返回 None。

default 参数用于设置默认的打开目录(请确保设置的目录已存在)。

import easygui as g
msg = '请选择一个文件'
title = '浏览文件夹'
default = r'D:\PycharmProjects\learning_54'
filename = g.diropenbox(msg,title,default)

输出结果界面为


image.png

上面前期条件准备好啦 现在开始优化代码吧

import easygui as g
import urllib.request

def main():
    msg = "请填写喵的尺寸"
    title = "下载一只喵"
    fieldNames = ["宽:", "高:"]
    fieldValues = []
    size = width, height = 400, 600
    fieldValues = g.multenterbox(msg, title, fieldNames, size)

    while 1:
        if fieldValues == None:
            break
        errmsg = ""

        try:
            width = int(fieldValues[0].strip())
        except:
            errmsg += "宽度必须为整数!"

        try:
            height = int(fieldValues[1].strip())
        except:
            errmsg += "高度必须为整数!"    

        if errmsg == "":
            break
        
        fieldValues = g.multenterbox(errmsg, title, fieldNames, fieldValues)

    url = "http://placekitten.com/g/%d/%d" % (width, height)

    response = urllib.request.urlopen(url)
    cat_img = response.read()

    filepath = g.diropenbox("请选择存放喵的文件夹")

    if filepath:
        filename = '%s/cat_%d_%d.jpg' % (filepath, width, height)
    else:
        filename = 'cat_%d_%d.jpg' % (width, height)

    with open(filename, 'wb') as f:
        f.write(cat_img)

if __name__ == "__main__":
    main()

你可能感兴趣的:(爬取一只喵)