爬虫学习第三天—requests模块—post请求
那些地方需要用到post请求?
- 登录注册( 在web工程师看来POST 比 GET 更安全,url地址中不会暴露用户的账号密码等信息)
- 需要传输大文本内容的时候( POST 请求对数据长度没有要求)
1、requests发送post请求的方法
response = requests.post(url, data)
data参数接收一个字典
requests模块发送post请求函数的其它参数和发送get请求的参数完全一致
2、post请求练习
通过百度翻译进行练习
01 思路分析
1、抓包确定请求url地址
2、确定请求的参数
3、确定返回数据的位置,所以经过以上分析,我们先一sug的url来模拟做验证
4、模拟浏览器获取数据
02、实例实现
import argparse
import requests
class BaiduTranslate(object):
def __init__(self,word):
self.url = "https://fanyi.baidu.com/sug"
# self.url = "https://fanyi.baidu.com/v2transapi"
self.data = {"kw": word}
self.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
# @classmethod
# def parameters(cls):
# # 传递参数
# parser = argparse.ArgumentParser()
# parser.add_argument("--key", "-key", help="指定角色")
# key_value = parser.parse_args()
# return key_value
def run(self):
# 翻译
response = requests.post(self.url, data=self.data,headers=self.headers) # 模拟请求post方式
# print(response.json())
try: # 解析获取的数据
for item in response.json()['data']:
if self.data.get('kw') == item.get('k'): # 当输入的数据和响应中输入的数据相同时提取输出的数据
print(item.get('v'))
return item.get('v')
except:
return "异常"
if __name__ == '__main__':
word = "hello" # 这里可以改成参数输入的方式,上面代码也需要打开注释
# word = input('请输入要查询的单词')
baidu = BaiduTranslate(word)
baidu.run()
03、运行结果
3、post数据来源
1、固定值 抓包比较不变值
2、输入值 抓包比较根据自身变化值
3、预设值 静态文件中的预设值,需要提前从静态html中获取
4、预设值 发请求,需要对指定地址发送请求
5、在客户端生成 分析js,模拟生成数据