上一章我们介绍了 get 请求,今天我就们谈谈 post 如何使用,其实在现实开发中我们也经常遇到 post 请求,比如用户登录一般都是 post 请求,下面我们以用户表单登录和有道翻译为例,进行post请求的案例操作:
案例一:用户登录界面的操作 ( http://www.iqianyue.com/mypost/ )
首先我们打开谷歌浏览器观察下请求方式:
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, "feiniu@163.com","哈哈")
print(response)
执行爬虫文件之后输出如下即可表明请求成功:
3.png案例二:有道翻译(http://fanyi.youdao.com/)
我们首先要打开网页以及观察下开发者模式:
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)
网友评论