在公众号,看到一个比较好玩的程序。它使用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来获取图片,然后加载图片。图片有点难看。