Requests是一个基于Python开的Http库,其在Python内置模块的基础上进行了高度的封装,从而我们在使用Http请求的时候变得非常的简单。
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
1.requests
import requests
r = requests.get('https://www.baidu.com/') # 百度首页
#获得响应码
print(r.status_code)
#获得响应数据
print(r.text)
运行结果:
200
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>ç¾åº¦ä¸ä¸ï¼ä½ å°±ç¥é</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=ç¾åº¦ä¸ä¸ class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>æ°é»</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>å°å¾</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>è§é¢</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>è´´å§</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>ç»å½</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">ç»å½</a>');
</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">æ´å¤äº§å</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>å
³äºç¾åº¦</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>©2017 Baidu <a href=http://www.baidu.com/duty/>使ç¨ç¾åº¦åå¿
读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>æè§åé¦</a> 京ICPè¯030173å· <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
对于带参数的URL,传入一个dict作为params参数:
import requests
# 带参数的get请求
page_params = requests.get(url='https://dict.baidu.com/s', params={'wd': 'python'})
print(page_params.status_code)
print(page_params.text)
运行结果:
200
<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="https://m.baidu.com/static/index/icon/w_icon2.png" type="image/x-icon" />
<meta name="keywords" content="python"/>
<meta name="description" content="百度汉语_python: "/>
<title>python_词语_成语_百度汉语</title>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?010e9ef9290225e88b64ebf20166c8c4";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<link rel="stylesheet" href="/static/asset/css/main.css" />
<link rel="stylesheet" type="text/css" href="/static/asset/css/style.css?v=201703281500" />
<script src="/static/fe-source/dep/ubc/index.js"></script>
</head>
<body class="pc module" id="pc--body" data-name="python">
<div style="display:none">
<script type="text/javascript">
window.__start_time = +(new Date());
</script>
</div>
<div id="search-bar">
<div class="wrapper">
<div style="margin-right:300px;position: relative">
<div class="dict-logo"><a href="/" title="百度汉语"></a></div>
<div class="search-box module" id="search-box" style="34px;">
<form name="f" id="form" action="/s" class="fm">
<span class="bg s_ipt_wr quickdelete-wrap">
<input id="kw" name="wd" class="s_ipt" placeholder="请输入要查询的词语、成语、诗词" value="python" maxlength="40" autocomplete="off">
<input name="from" value="zici" type="hidden">
</span>
<span class="bg s_btn_wr focus">
<input type="submit" id="su" value="百度一下" class="bg s_btn">
</span>
</form>
<div class="suggest-div">
<div class="suggest-content">
</div>
</div>
</div>
</div>
<div class="wrap-userbar module" id="wrap-userbar">
<ul class="userbar logout">
<li class="userbar-item">
<a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http://hanyu.baidu.com%2Fs%3Fwd%3Dpython" id="login_link">登录</a>
</li>
<li class="pipe userbar-item">|</li>
<li><a href="/download" name="tj_cidian" class="userbar-item download-link">手机版</a></li>
<li class="pipe userbar-item">|</li>
<li class="userbar-item">
<a href="http://www.baidu.com" target="_blank">百度首页</a>
</li>
</ul>
</div>
</div>
</div>
<!-- 外层包裹 -->
<div id="body-wrapper">
<div id="main" class="module">
<div class="app-qrcode">
<img class="app-qrcode-pic" src="/static/fe-source/img/qrcode_load02.png" />
<div class="app-qrcode-title">下载百度汉语App</div>
<div>名师好课免费看</div>
<img class="app-qrcode-split" src="/static/fe-source/img/qrcode_split.png" />
</div>
<div class="left nav-list module" id="nav-list"></div>
<div class="content-panel module" id="content-panel">
<div id="qa-tip" style="display:none"></div>
<input type="hidden" id="resultType" value="empty" />
<div class="tab-list module" id="empty-body">
<div id="term-header" class="header-info">
<div id="pinyin">
<h2>
<strong>python</strong>
</h2>
</div>
</div>
<div class="content" id="baike-wrapper">
<div style="position:relative;">
<h1><b class="title" id="baike">百科释义</b></h1>
<span class="baike-feedback" data="p" style="position: absolute;top: 5px;right: 10px;color: #999;cursor: pointer;">报错</span>
</div>
<div class="tab-content">
<p>
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。2021年10月,...
<a href="http://baike.baidu.com/subview/21087/21087.htm?forcehttps=1?fr=kg_hanyu" target="baike">查看百科</a>
</p>
</div>
<div class="tab-content" style="color: #d0d0d0;text-indent: 0;">注:百科释义来自于百度百科,由网友自行编辑。</div>
</div>
</div>
<div id="right-panel" class="right module">
<div class="recmd-panel module" id="recmd-panel">
<div class="list">
</div>
</div>
</div>
</div>
<!--content-panel-->
</div>
</div>
<!--body-wapper-->
</div>
<div id="scroll-top"></div>
<p id="copyright">© Baidu
<a href="http://www.baidu.com/duty/">使用百度前必读</a>
<a href="http://www.baidu.com">百度首页</a>
<a href="/zici/search" style="display:none">站内搜索</a>
<a href="http://help.baidu.com/newadd?prod_id=8&category=1">问题反馈</a>
<a href="/contact">商务合作</a>
<a href="http://weibo.com/5789783834/manage">关注微博</a>
<!-- <a href="http://qm.qq.com/cgi-bin/qm/qr?k=WUsL3Jbek0Km8R4r-m1dK4JZjGw_A8Ba" target="_blank">用户QQ群:484758177</a> -->
</p>
<div id="fmp_flash_div" style="display:none"><audio id="audio"></audio></div>
<script src="/static/asset/dep/zepto/zepto.min.js"></script>
<script src="/static/asset/dep/esl/esl.min.js"></script>
<script src="/static/asset/dep/ubc/index.js"></script>
<script>
require.config(
{
baseUrl: '/static/asset/asset',
urlArgs: 'v=201703281500',
'packages': [
{
'name': 'etpl',
'location': '../dep/etpl',
'main': 'main'
}
]
}
);
require(['main', 'sug_pc', 'ubcUtils'], function(mian, sug_pc, ubcUtils){
sug_pc.init();
if ($('#resultType').val()) {
// 页面pv打点
ubcUtils.init('pagePv', 13910);
ubcUtils.event('pagePv', {
page: $('#resultType').val() + '_detail_pc_pv',
type: 'view',
value: 'page'
});
}
});
$("#kw")[0].focus();
window.__finish_time = + (new Date());
window.__used_time = __finish_time - window.__start_time;
</script>
</div>
</body>
</html>
要发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:
import requests
# 带参数的post请求
article_data = {
"uid": 100,
"title": '测试文章',
"body": "<h1>hello,world!</h1>"
}
page_post = requests.post(url='http://jsonplaceholder.typicode.com/posts', data=article_data)
print(page_post.status_code)
print(page_post.text)
# 获得响应头部
print(page_post.headers)
运行结果:
201
{
"uid": "100",
"title": "测试文章",
"body": "<h1>hello,world!</h1>",
"id": 101
}
{'Date': 'Sun, 01 May 2022 01:49:01 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '93', 'Connection': 'keep-alive', 'X-Powered-By': 'Express', 'X-Ratelimit-Limit': '1000', 'X-Ratelimit-Remaining': '999', 'X-Ratelimit-Reset': '1651369764', 'Vary': 'Origin, X-HTTP-Method-Override, Accept-Encoding', 'Access-Control-Allow-Credentials': 'true', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Expires': '-1', 'Access-Control-Expose-Headers': 'Location', 'Location': 'http://jsonplaceholder.typicode.com/posts/101', 'X-Content-Type-Options': 'nosniff', 'Etag': 'W/"5d-488x7zAF9bl6JHZR+GGYrrGQrqM"', 'Via': '1.1 vegur', 'CF-Cache-Status': 'DYNAMIC', 'Report-To': '{"endpoints":[{"url":"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=YsJwtbOxtbuWLE7gkgzuBOcek8LmkoMZMuv52BTy1EKGpIMFaBuFns%2BRSnZIznbyhGeRi8Wapn92mVQjinfV2Pbpu6ndi0wiAkcuDm9KrsRgKP4LOFTF5teh3hKKy0fvUvfmuMViZS7NyshdANMQ"}],"group":"cf-nel","max_age":604800}', 'NEL': '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}', 'Server': 'cloudflare', 'CF-RAY': '7044dbb56a6b7bdf-LAX', 'alt-svc': 'h3=":443"; ma=86400, h3-29=":443"; ma=86400'}
要在请求中传入Cookie,只需准备一个dict传入cookies参数:
import requests
cs = {'token': '6778945345', 'status': 'test'}
resp = requests.get('http://jsonplaceholder.typicode.com/posts', cookies=cs)
print(resp.text)
其它请求方式如下总结:
# GET请求
requests.get('www.google.com')
# POST请求
requests.post('http://useinfo/list/post')
# PUT请求
requests.put('http://useinfo/list/put')
# DELETE请求
requests.delete('http://useinfo/list/delete')
# HEAD请求
requests.head('http://useinfo/list/head')
# OPTIONS请求
requests.options('http://http://useinfo/list/option')