首先介绍一个喵网站 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)
返回结果为
里面的a就相当于values=[]
2:diropenbox()
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)
输出结果界面为
上面前期条件准备好啦 现在开始优化代码吧
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()