zoukankan      html  css  js  c++  java
  • python+爬虫+签名

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

  • 相关阅读:
    CV
    Flutter 概览
    spaCy 基本使用
    图像读写、属性
    图像原理
    NLP 实战
    NLTK 相似性度量
    NLTK 停用词、罕见词
    NLTK 词干提取、词形还原
    NLTK 基本操作
  • 原文地址:https://www.cnblogs.com/tianqianlan/p/10040340.html
Copyright © 2011-2022 走看看