在公众号,看到一个比较好玩的程序。它使用post的来传送请求,以前没有遇到过。可能是自己,写的程序太少了。查了一下post的用法:
通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:
1 >>> payload = {'key1': 'value1', 'key2': 'value2'} 2 3 >>> r = requests.post("http://httpbin.org/post", data=payload) 4 >>> print(r.text) 5 { 6 ... 7 "form": { 8 "key2": "value2", 9 "key1": "value1" 10 }, 11 ... 12 }
用data参数,发送一个类似表单的数据。虽然是照着别人的程序敲得,但是还是遇到了,很多了错误。总结起来,是字典里的键写错了。导致爬取的图片,不是自己想要的图片。自己眼高手低啊。
虽然我们的键和值写错了,可以爬取图片,但是爬取的图片并不是我们想要的。自己思考是,传递的参数,不能加载到爬取的网页。爬取的只是网页的初始图片,而不是我们传递参数后运行得到的图片。
以下是代码:
1 from tkinter import * 2 from tkinter import messagebox 3 import requests 4 import re 5 from PIL import Image,ImageTk 6 7 #模拟浏览器发送请求 8 def download(): 9 10 startUrl = "http://www.uustv.com/" 11 #获取用户输入的姓名 12 name = entry.get() 13 #去空格 14 name = name.strip() 15 if name == '': 16 messagebox.showinfo("提示:","请输入用户名") 17 else: 18 date = { 19 'word': name, 20 'sizes': '60', 21 'fonts': 'jfcs.ttf', 22 'fontcolor' : '#000000' 23 } 24 result = requests.post(startUrl,data = date) 25 result.encoding = "utf-8" 26 #获取网站的源代码 27 html = result.text 28 reg = '<div class="tu">.<img src="(.*?)"/></div>' 29 #正则表达式 (.*?)全部都需要匹配 30 imagePath = re.findall(reg,html) 31 #获取图片的完整路径 32 imgUrl = startUrl + imagePath[0] 33 print(imgUrl) 34 #获取图片的内容 35 response = requests.get(imgUrl).content 36 f = open('{}.gif'.format(name),'wb') 37 f.write(response) 38 39 #图片显示到窗口上 40 bm = ImageTk.PhotoImage(file = '{}.gif'.format(name)) 41 42 label2 = Label(root,image = bm) 43 label2.bm = bm 44 label2.grid(row = 2,columnspan = 2) 45 46 47 # GUI用户使用界面 48 #创建窗口 49 root = Tk() 50 #标题 51 root.title("我要学python") 52 #窗口的大小 宽,高 53 root.geometry("600x300") 54 #窗口的位置 55 root.geometry("-500+200") 56 #标签控件 57 label = Label(root,text = "签名",font = ("华文行楷",20),fg = "blue") 58 label.grid(row = 0,column = 0) 59 60 #设计输入框 61 entry = Entry(root,font = ("微雅素黑",20)) 62 entry.grid(row = 0,column = 1) 63 #点击按钮 64 button = Button(root,text = "设计签名",font = ("微雅素黑",22),command = download) 65 button.grid(row = 1,column = 0) 66 #循环消息,显示窗口 67 root.mainloop()
个人总结是通过post来获取图片的地址,然后通过get来获取图片,然后加载图片。图片有点难看。