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 os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python中的高级数据结构详解
Mar 27 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
python复制列表时[:]和[::]之间有什么区别
Oct 16 Python
python模块导入的细节详解
Dec 10 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
Python 使用生成器代替线程的方法
Aug 04 Python
python 利用Pyinstaller打包Web项目
Oct 23 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
javascript中length属性的探索
2011/07/31 Javascript
JS的get和set使用示例
2014/02/20 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
js选择器全面解析
2016/06/27 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
解决Python3中的中文字符编码的问题
2018/07/18 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
食品行业求职人的自我评价
2014/01/19 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
法务专员岗位职责
2015/02/14 职场文书
员工辞职信怎么写
2015/02/27 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
看上去很美观后感
2015/06/10 职场文书
护理心得体会范文
2016/01/22 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书