爬虫基础之urllib的简单使用 - POST 请求(二)

上一章我们介绍了 get 请求,今天我就们谈谈 post 如何使用,其实在现实开发中我们也经常遇到 post 请求,比如用户登录一般都是 post 请求,下面我们以用户表单登录和有道翻译为例,进行post请求的案例操作:

案例一:用户登录界面的操作 ( http://www.iqianyue.com/mypost/ )

首先我们打开谷歌浏览器观察下请求方式:
爬虫基础之urllib的简单使用 - POST 请求(二)_第1张图片
2.png
观察了上面的请求方式之后我们开始写代码:

导入库

import urllib.request
import urllib.parse

#定义一个使用post请求数据的函数     登录表单
def use_post_userdata(url, user_name, user_pwd):
    #以字典形式存储表单参数
    u_data = {
        "name":user_name,
        "pass":user_pwd
    }
    #将数据使用 urlencode 编码处理后,使用 encode()设置为 utf-8 编码
    post_data = urllib.parse.urlencode(u_data).encode("utf-8")
    req = urllib.request.Request(url, post_data)
    req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
    data = urllib.request.urlopen(req).read().decode("utf-8") # utf-8 解码成 Unicode
    #返回请求的数据,当然在这里你可以写入文件
    return data


#调用
url = "http://www.iqianyue.com/mypost/"
response = use_post_userdata(url, "[email protected]","哈哈")
print(response)

执行爬虫文件之后输出如下即可表明请求成功:

爬虫基础之urllib的简单使用 - POST 请求(二)_第2张图片
3.png

案例二:有道翻译(http://fanyi.youdao.com/)

我们首先要打开网页以及观察下开发者模式:
爬虫基础之urllib的简单使用 - POST 请求(二)_第3张图片
4.png

由于返回的是 json 字符串的格式,因此我们需要导入 json 模块以便解析 json 数据

import json

接下来定义方法:

#定义请求有道词典翻译的post函数   (http://fanyi.youdao.com/)
def use_post_youdao(url, content):
    #讲请求参数放入字典中,请求参数很多,其实放两个我们需要的即可
    yd_data = {
        "i":content,
        "doctype":"json" #返回json数据
    }
    req = urllib.request.Request(url)
    req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) \
        AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36")
    post_data = urllib.parse.urlencode(yd_data).encode("utf-8")#编码为utf-8
    response = urllib.request.urlopen(req, post_data)
    html = response.read().decode("utf-8")#解码为 Unicode 编码
    #这里由于我们设置返回的数据是json字符串,因此我们使用json库进行解析
    target = json.loads(html) #这里要注意:调用的事 loads()而不是load()方法
    #返回结果为:
    #{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"我喜欢你","tgt":"I like you"}]]}
    #解析
    data = target['translateResult'][0][0]['tgt']
    return data


#调用
#由于反爬做得比较好,因此实际的请求连接是下面这个
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
response_data = use_post_youdao(url, "我喜欢你")
print("翻译结果为-> %s"%response_data)

执行文件之后即可看到我们想要的结果:

5.png

你可能感兴趣的:(爬虫基础之urllib的简单使用 - POST 请求(二))