Python的requests网络编程包使用教程


Posted in Python onJuly 11, 2016

早就听说requests的库的强大,只是还没有接触,今天接触了一下,发现以前使用urllib,urllib2等方法真是太搓了……
这里写些简单的使用初步作为一个记录

一、下载

官方项目页: https://pypi.python.org/pypi/requests/#downloads
可以从上面直接下载。

二、发送无参数的get请求

>>> r = requests.get('http://httpbin.org/get')
>>> print r.text
{
 "args": {}, 
 "headers": {
  "Accept": "*/*", 
  "Accept-Encoding": "gzip, deflate", 
  "Connection": "close", 
  "Host": "httpbin.org", 
  "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7", 
  "X-Request-Id": "8a28bbea-55cd-460b-bda3-f3427d66b700"
 }, 
 "origin": "124.192.129.84", 
 "url": "http://httpbin.org/get"
}

三、发送带参数的get请求,将key与value放入一个字典中,通过params参数来传递,其作用相当于urllib.urlencode

>>> import requests
>>> pqyload = {'q':'杨彦星'}
>>> r = requests.get('http://www.so.com/s',params = pqyload)
>>> r.url
u'http://www.so.com/s?q=%E6%9D%A8%E5%BD%A6%E6%98%9F'

四、发送post请求,通过data参数来传递,

>>> payload = {'a':'杨','b':'hello'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print r.text
{
 "args": {}, 
 "data": "", 
 "files": {}, 
 "form": {
  "a": "\u6768", 
  "b": "hello"
 }, 
 "headers": {
  "Accept": "*/*", 
  "Accept-Encoding": "gzip, deflate", 
  "Connection": "close", 
  "Content-Length": "19", 
  "Content-Type": "application/x-www-form-urlencoded", 
  "Host": "httpbin.org", 
  "User-Agent": "python-requests/2.3.0 CPython/2.6.6 Windows/7", 
  "X-Request-Id": "c81cb937-04b8-4a2d-ba32-04b5c0b3ba98"
 }, 
 "json": null, 
 "origin": "124.192.129.84", 
 "url": "http://httpbin.org/post"
}
>>>

可以看到,post参数已经传到了form里,data不光可以接受字典类型的数据,还可以接受json等格式

>>> payload = {'a':'杨','b':'hello'}
>>> import json
>>> r = requests.post('http://httpbin.org/post', data=json.dumps(payload))

五、发送文件的post类型,这个相当于向网站上传一张图片,文档等操作,这时要使用files参数

>>> url = 'http://httpbin.org/post'
>>> files = {'file': open('touxiang.png', 'rb')}
>>> r = requests.post(url, files=files)

定制headers,使用headers参数来传递

>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}
>>> r = requests.post(url, data=json.dumps(payload), headers=headers)

 
六、响应内容
响应状态码:

r = requests.get('http://httpbin.org/get')
print r.status_code

响应头:
 

>>> print r.headers
{'content-length': '519', 'server': 'gunicorn/18.0', 'connection': 'keep-alive', 'date': 'Sun, 15 Jun 2014 14:19:52 GMT', 'access-control-allow-origin': '*', 'content-type': 'application/json'}

也可以取到这个个别的响应头用来做一些判断,这里的参数是不区分大小写的

r.headers[‘Content-Type']
r.headers.get(‘Content-Type')

响应内容,前面已经在应用了:

r.text
r.content

 
七、获取响应中的cookies

>>> r = requests.get('http://www.baidu.com')
>>> r.cookies['BAIDUID']
'D5810267346AEFB0F25CB0D6D0E043E6:FG=1'

也可以自已定义请求的COOKIES

>>> url = 'http://httpbin.org/cookies'
>>> cookies = {'cookies_are':'working'}
>>> r = requests.get(url,cookies = cookies)
>>> 
>>> print r.text
{
 "cookies": {
  "cookies_are": "working"
 }
}
>>>

cookies还有很多,因为目前我也还不是很多,以后再扩充吧

八、使用timeout参数设置超时时间

>>> requests.get('http://github.com', timeout=1) 
<Response [200]>

如果将时间设置成非常小的数,如

requests.get('http://github.com', timeout=0.001)

,那么如果在timeout的时间内没有连接,那么将会抛出一个Timeout的异常

九、访问中使用session
先初始化一个session对象,

s = requests.Session()

然后使用这个session对象来进行访问,r = s.post(url,data = user)
以下通过访问人人网来获取首页中的最近来访问,然后再访问查看更多的来访来读取更多的最近来访
更多的来访就是以带session的访问http://www.renren.com/myfoot.do

#coding:utf-8
import requests
import re
url = r'http://www.renren.com/ajaxLogin'
user = {'email':'email','password':'pass'}
s = requests.Session()
r = s.post(url,data = user)
html = r.text
visit = []
first = re.compile(r'</span><span class="time-tip first-tip"><span class="tip-content">(.*?)</span>')
second = re.compile(r'</span><span class="time-tip"><span class="tip-content">(.*?)</span>')
third = re.compile(r'</span><span class="time-tip last-second-tip"><span class="tip-content">(.*?)</span>')
last = re.compile(r'</span><span class="time-tip last-tip"><span class="tip-content">(.*?)</span>')
visit.extend(first.findall(html))
visit.extend(second.findall(html))
visit.extend(third.findall(html))
visit.extend(last.findall(html))
for i in visit:
  print i
print '以下是更多的最近来访'
vm = s.get('http://www.renren.com/myfoot.do')
fm = re.compile(r'"name":"(.*?)"')
visitmore = fm.findall(vm.text)
for i in visitmore:
  print i

Python的requests网络编程包使用教程

十、requests-cookies
Cookies就像字典一样储存了各个项的值并保存起来, 例如我们的用户名, 密码, 登录信息等都可以保存起来. 当网页再次被加载时可以从cookies中找到相关的信息并从而免除再次输入赋值的过程.
在requests中使用get等请求时同样可以赋予cookies信息. 例如我们从浏览器中获取某次网页加载时请求的cookies, 可以同样赋予requests再次使用.
requests请求时加入cookies={key:value}参数即可传递cookies.

import requests
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')

r = requests.get(url, cookies=cookies)
r.text
#'{"cookies": {"cookies_are": "working"}}'

查询某次请求的cookies很简单, 就像获得headers一样使用cookies属性即可:

url = 'http://example.com/some/cookie/setting/url'
r = requests.get(url)

r.cookies['example_cookie_name']
# 'example_cookie_value'

以下函数可以分解浏览器获得的cookies字符串到一个字典,从而帮助我们模拟requests请求.

def browsercookiesdict(s):
 '''Covert cookies string from browser to a dict'''
 ss=s.split(';')
 outdict={}
 for item in ss:
 i1=item.split('=',1)[0].strip()
 i2=item.split('=',1)[1].strip()
 outdict[i1]=i2
 return outdict
Python 相关文章推荐
Python使用urllib2获取网络资源实例讲解
Dec 02 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Python对列表排序的方法实例分析
May 16 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
Python元字符的用法实例解析
Jan 17 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
pandas 透视表中文字段排序方法
Nov 16 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
基于Python 函数和方法的区别说明
Mar 24 Python
用Python制作灯光秀短视频的思路详解
Apr 13 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 #Python
Python中的异常处理相关语句基础学习笔记
Jul 11 #Python
Python编写简单的HTML页面合并脚本
Jul 11 #Python
Python中super()函数简介及用法分享
Jul 11 #Python
Swift中的协议(protocol)学习教程
Jul 08 #Python
Python中多线程的创建及基本调用方法
Jul 08 #Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 #Python
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
分享10段PHP常用代码
2015/11/11 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
Js获取事件对象代码
2010/08/05 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
详解JS构造函数中this和return
2017/09/16 Javascript
Mac下安装vue
2018/04/11 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
python中比较两个列表的实例方法
2019/07/04 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
python实现滑雪者小游戏
2020/02/22 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
投标保密承诺书
2014/05/19 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
Go 语言结构实例分析
2021/07/04 Golang
JavaScript获取URL参数的方法分享
2022/04/07 Javascript