思考:哪些地方我们会用到post请求?
- 登录注册(post请求比get更安全,url地址中不会暴露用户的账号密码等信息)
- 需要传输大文本内容的时候(post请求对数据长度没有要求)
1.1 requests发送post请求的方法(与get请求类似)
- response = requests.post(url, data)
- data参数接收一个字典
- requests模块发送post请求函数的其他参数和发送get请求的参数完全一致
1.2 post请求练习
以汉译英百度在线翻译为例:
思路:
1.进入网页抓包确定请求URL地址
2.确定请求的参数
3.确定返回数据的位置
4.模拟浏览器获取数据
1.2.1 抓包分析的结论
1. url地址:https://fanyi.baidu.com/sug
2. 请求方法:post
3. 请求所需参数:kw: 汉语
4.User-Agent
1.2.2 代码实现(写成了面向对象的形式)
代码:
import requests import json class King(object): def __init__(self, word_): self.url = 'https://fanyi.baidu.com/sug' self.headers = { 'User-Agent': '改为你的user-agent' } self.data = { 'kw': word_ } def get_data(self): response = requests.post(self.url, data=self.data, headers=self.headers) return response.content def parse_data(self, data): # loads方法将json字符串转换成python字典 dict_data = json.loads(data) print(dict_data['data'][0]['v']) def run(self): # 编写爬虫逻辑 # url # headers # data字典 # 发送请求获取响应 response = self.get_data() self.parse_data(response) # 数据解析 if __name__ == '__main__': while True: word = input('请输入你要翻译的词(退出输入0):') if word == '0': break a = King(word_=word) a.run()
运行结果示例:
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试