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模块学习 datetime介绍
Aug 27 Python
python多线程抓取天涯帖子内容示例
Apr 03 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
构建Python包的五个简单准则简介
Jun 15 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Python文件路径名的操作方法
Oct 30 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
pd.DataFrame中的几种索引变换的实现
Jun 16 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数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
python学习之面向对象【入门初级篇】
2017/01/21 Python
python脚本替换指定行实现步骤
2017/07/11 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
简单了解如何封装自己的Python包
2020/07/08 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
电子商务个人职业生涯规划范文
2014/02/12 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
会计试用期自我评价
2014/09/19 职场文书
项目合作协议书
2014/09/23 职场文书
2015年校长新年寄语
2014/12/08 职场文书
督导岗位职责范本
2015/04/10 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL