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如何通过subprocess调用adb命令详解
Aug 27 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
python中如何使用insert函数
Jan 09 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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(2)
2006/10/09 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
angularJS开发注意事项
2018/05/26 Javascript
微信小程序关键字变色实现代码实例
2019/12/13 Javascript
python实现在sqlite动态创建表的方法
2015/05/08 Python
Python操作串口的方法
2015/06/17 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
python线程中的同步问题及解决方法
2019/08/29 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
keras得到每层的系数方式
2020/06/15 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
荣耀商城:HIHONOR
2020/11/03 全球购物
小学生中国梦演讲稿
2014/04/23 职场文书
学校运动会广播稿
2014/10/11 职场文书
男生贾里读书笔记
2015/06/30 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
创业计划书之家教中心
2019/09/25 职场文书
Python3的进程和线程你了解吗
2022/03/16 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫