Requests库处理GET和POST
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
- GET - 从指定的资源请求数据。
- POST - 向指定的资源提交要被处理的数据。
get 请求
无参数请求
import requests
content = '周杰伦'
response = requests.get(f'https://www.sogou.com/web?query={content}')
response.text
提示访问出错,原因服务器需要特定请求头,查看一下默认请求头
import requests
content = "周杰伦"
response = requests.get(f"https://www.sogou.com/web?query={content}")
response.request.headers
输出:
{
"User-Agent": "python-requests/2.31.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "*/*",
"Connection": "keep-alive",
"Cookie": "ABTEST=1|1695191285|v17; SNUID=0C9BF2A3D6D0D011AFBD2BE6D619FC09; IPLOC=CN6101; SUID=DA4D24755019870A00000000650A90F5; cuid=AAGtL+RnRwAAAAqHS2RBCQAAEAM=",
}
加入请求头的User-Agent访问:
import requests
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
}
content = "周杰伦"
response = requests.get(f"https://www.sogou.com/web?query={content}", headers=head)
response.text
get请求的参数请求
get请求也可以传递参数,例如
https://movie.douban.com/j/chart/top_list?type=20&interval_id=100%3A90&action=&start=0&limit=20
?后面即为参数=值,用&连接
import requests
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
}
url = "https://movie.douban.com/j/chart/top_list"
data = {
"type": "20",
"interval_id": "100:90",
"action": "",
"start": "0",
"limit": "2",
}
content = "周杰伦"
response = requests.get(url, headers=head, params=data)
response.json()
输出
[{'rating': ['9.0', '45'],
'rank': 1,
'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1021883305.jpg',
'is_playable': True,
'id': '1293181',
'types': ['悬疑', '惊悚', '恐怖'],
'regions': ['美国'],
'title': '惊魂记',
'url': 'https://movie.douban.com/subject/1293181/',
'release_date': '1960-06-16',
'actor_count': 30,
'vote_count': 298061,
'score': '9.0',
'actors': ['安东尼·博金斯',
'维拉·迈尔斯',
'约翰·加文',
'珍妮特·利',
'马丁·鲍尔萨姆',
'约翰·麦克因泰',
'西蒙·奥克兰',
'弗兰克·艾伯森',
'帕特里夏·希区柯克',
'沃恩·泰勒',
'卢伦·塔特尔',
'约翰·安德森',
'莫特·米尔斯',
'吉特·卡森',
'维吉尼亚·格雷格',
'阿尔弗雷德·希区柯克',
'珍妮特·诺兰',
'罗伯特·奥斯本',
'海伦·华莱士',
'沃尔特·培根',
'弗朗西斯·德塞尔斯',
'乔治·多克斯塔德',
'乔治·埃尔德雷奇',
'哈珀·弗莱厄蒂',
'萨姆·弗林特',
'弗兰克·基尔蒙德',
'泰德·奈特',
'帕特·麦卡弗里',
'汉斯-乔基姆·默比斯',
'弗雷德·谢威勒'],
'is_watched': False},
{'rating': ['8.8', '45'],
'rank': 2,
'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p726839485.jpg',
'is_playable': False,
'id': '1417598',
'types': ['悬疑', '惊悚', '恐怖'],
'regions': ['美国'],
'title': '电锯惊魂',
'url': 'https://movie.douban.com/subject/1417598/',
'release_date': '2004-01-19',
'actor_count': 17,
'vote_count': 537215,
'score': '8.8',
'actors': ['雷·沃纳尔',
'加利·艾尔维斯',
'丹尼·格洛弗',
'梁振邦',
'迪娜·迈耶',
'迈克·巴特斯',
'保罗·古德勒支',
'迈克尔·爱默生',
'本尼托·马丁内斯',
'肖妮·史密斯',
'麦肯兹·韦加',
'莫妮卡·波特',
'耐德·巴拉米',
'亚丽姗德拉·全',
'托宾·贝尔',
'汉斯·雷斯',
'奥伦·科尔斯'],
'is_watched': False}]
处理 post 请求
POST请求往往需要提交参数,以百度翻译为例,其输入
import requests
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
}
# post 为 {kw:hello}
post_data = {"kw": "hello"}
query = "周杰伦"
response = requests.post("https://fanyi.baidu.com/sug", headers=head, data=post_data)
# 返回文本信息
response.text
'{"errno":0,"data":[{"k":"hello","v":"int. \\u6253\\u62db\\u547c; \\u54c8\\u55bd\\uff0c\\u5582; \\u4f60\\u597d\\uff0c\\u60a8\\u597d; \\u8868\\u793a\\u95ee\\u5019 n. \\u201c\\u5582\\u201d\\u7684\\u62db\\u547c\\u58f0\\u6216\\u95ee\\u5019\\u58f0 vi. \\u558a\\u201c\\u5582"},{"k":"hellos","v":"n. \\u5582( hello\\u7684\\u540d\\u8bcd\\u590d\\u6570 )"},{"k":"hellow","v":"\\uff08\\u901a\\u5e38\\u7684\\u62db\\u547c\\u8bed\\uff09\\u55e8\\uff0c \\uff08\\u6253\\u7535\\u8bdd\\u7528\\uff09\\u5582\\uff01\\uff0c \\uff08\\u82f1\\uff09\\uff08\\u8868\\u793a\\u60ca\\u8bb6\\uff09\\u54ce\\u54df"},{"k":"hello girl","v":"\\u5973\\u8bdd\\u52a1\\u5458; \\u5973\\u7535\\u8bdd\\u63a5\\u7ebf\\u5458"},{"k":"hello kitty","v":"n. \\u5361\\u901a\\u4e16\\u754c\\u4e2d; \\u6709\\u8fd9\\u6837\\u4e00\\u53ea\\u5c0f\\u732b; \\u6ca1\\u6709\\u5634\\u5df4; \\u8138\\u86cb\\u5706\\u5706\\u7684"}],"logid":2218552173}'
# 返回json数据
response.json()
{'errno': 0,
'data': [{'k': 'hello',
'v': 'int. 打招呼; 哈喽,喂; 你好,您好; 表示问候 n. “喂”的招呼声或问候声 vi. 喊“喂'},
{'k': 'hellos', 'v': 'n. 喂( hello的名词复数 )'},
{'k': 'hellow', 'v': '(通常的招呼语)嗨, (打电话用)喂!, (英)(表示惊讶)哎哟'},
{'k': 'hello girl', 'v': '女话务员; 女电话接线员'},
{'k': 'hello kitty', 'v': 'n. 卡通世界中; 有这样一只小猫; 没有嘴巴; 脸蛋圆圆的'}],
'logid': 2218552173}
参考:https://www.bilibili.com/video/BV1NX4y1X7AE?p=9&spm_id_from=pageDriver&vd_source=e78d869c28d2119248eff5d85f195ece