win与linux系统中python requests 安装


Posted in Python onDecember 04, 2016

在 windows 系统下,只需要输入命令 pip install requests ,即可安装。

在 linux 系统下,只需要输入命令 sudo  pip install requests ,即可安装。

或者

=================

Window

1.  下载requests  被墙

 打开这个网址, http://www.lfd.uci.edu/~gohlke/pythonlibs 在这个网站上面有很多 python 的第三方库文件, ctrl+f 找到 requests 下载

.whl文件下载下来后,将后缀名从 .whl 改为 .zip ,然后解压文件,我们可以得到两个文件夹

将requests 文件夹复制到 python 的安装目录下的 lib 目录下

requests 已经安装完毕,输入 import requests 命令来试试是否安装成功,

   import requests 没有报错,说明 requests 已经成功安装。

2.快速指南

2.1 发送请求
发送请求很简单的,首先要导入requests模块:

>>>import requests

接下来让我们获取一个网页,例如我个人博客的首页:

>>>r = requests.get('http://www.zhidaow.com')

接下来,我们就可以使用这个r的各种方法和函数了。
另外,HTTP请求还有很多类型,比如POST,PUT,DELETE,HEAD,OPTIONS。也都可以用同样的方式实现:

>>> r = requests.post("http://httpbin.org/post")
>>> r = requests.put("http://httpbin.org/put")
>>> r = requests.delete("http://httpbin.org/delete")
>>> r = requests.head("http://httpbin.org/get")
>>> r = requests.options("http://httpbin.org/get")

因为目前我还没用到这些,所以没有深入研究。

2.2 在URLs中传递参数
有时候我们需要在URL中传递参数,比如在采集百度搜索结果时,我们wd参数(搜索词)和rn参数(搜素结果数量),你可以手工组成URL,requests也提供了一种看起来很NB的方法:

>>> payload = {'wd': '张亚楠', 'rn': '100'}
>>> r = requests.get("http://www.baidu.com/s", params=payload)
>>> print r.url
u'http://www.baidu.com/s?rn=100&wd=%E5%BC%A0%E4%BA%9A%E6%A5%A0'

上面wd=的乱码就是“张亚楠”的转码形式。(好像参数按照首字母进行了排序。)

2.3 获取响应内容
可以通过r.text来获取网页的内容。

>>> r = requests.get('https://www.zhidaow.com')
>>> r.text
u'<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml"...'

文档里说,requests会自动将内容转码。大多数unicode字体都会无缝转码。但我在cygwin下使用时老是出现UnicodeEncodeError错误,郁闷。倒是在python的IDLE中完全正常。
另外,还可以通过r.content来获取页面内容。

>>> r = requests.get('https://www.zhidaow.com')
>>> r.content
b'<!DOCTYPE html>\n<html xmlns="http://www.w3.org/1999/xhtml"...'

文档中说r.content是以字节的方式去显示,所以在IDLE中以b开头。但我在cygwin中用起来并没有,下载网页正好。所以就替代了urllib2的urllib2.urlopen(url).read()功能。(基本上是我用的最多的一个功能。)

2.4 获取网页编码

可以使用r.encoding来获取网页编码。

>>> r = requests.get('http://www.zhidaow.com')
>>> r.encoding
'utf-8'

当你发送请求时,requests会根据HTTP头部来猜测网页编码,当你使用r.text时,requests就会使用这个编码。当然你还可以修改requests的编码形式。

>>> r = requests.get('http://www.zhidaow.com')
>>> r.encoding
'utf-8'
>>>r.encoding = 'ISO-8859-1'

像上面的例子,对encoding修改后就直接会用修改后的编码去获取网页内容。

2.5 json

像urllib和urllib2,如果用到json,就要引入新模块,如json和simplejson,但在requests中已经有了内置的函数,r.json()。就拿查询IP的API来说:

>>>r = requests.get('http://ip.taobao.com/service/getIpInfo.php?ip=122.88.60.28')
>>>r.json()['data']['country']
'中国'

2.6 网页状态码
我们可以用r.status_code来检查网页的状态码。

>>>r = requests.get('http://www.mengtiankong.com')
>>>r.status_code
200
>>>r = requests.get('http://www.mengtiankong.com/123123/')
>>>r.status_code
404
>>>r = requests.get('http://www.baidu.com/link?url=QeTRFOS7TuUQRppa0wlTJJr6FfIYI1DJprJukx4Qy0XnsDO_s9baoO8u1wvjxgqN')
>>>r.url
u'http://www.zhidaow.com/
>>>r.status_code
200

前两个例子很正常,能正常打开的返回200,不能正常打开的返回404。但第三个就有点奇怪了,那个是百度搜索结果中的302跳转地址,但状态码显示是200,接下来我用了一招让他原形毕露:

>>>r.history
(<Response [302]>,)

这里能看出他是使用了302跳转。也许有人认为这样可以通过判断和正则来获取跳转的状态码了,其实还有个更简单的方法:

>>>r = requests.get('http://www.baidu.com/link?url=QeTRFOS7TuUQRppa0wlTJJr6FfIYI1DJprJukx4Qy0XnsDO_s9baoO8u1wvjxgqN', allow_redirects = False)
>>>r.status_code
302

只要加上一个参数allow_redirects,禁止了跳转,就直接出现跳转的状态码了,好用吧?我也利用这个在最后一掌做了个简单的获取网页状态码的小应用,原理就是这个。

2.7 响应头内容

可以通过r.headers来获取响应头内容。

>>>r = requests.get('http://www.zhidaow.com')
>>> r.headers
{
 'content-encoding': 'gzip',
 'transfer-encoding': 'chunked',
 'content-type': 'text/html; charset=utf-8';
 ...
}

可以看到是以字典的形式返回了全部内容,我们也可以访问部分内容。

>>> r.headers['Content-Type']
'text/html; charset=utf-8'

>>> r.headers.get('content-type')
'text/html; charset=utf-8'

2.8 设置超时时间

我们可以通过timeout属性设置超时时间,一旦超过这个时间还没获得响应内容,就会提示错误。

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

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)

2.9 代理访问
采集时为避免被封IP,经常会使用代理。requests也有相应的proxies属性。

import requests

proxies = {
 "http": "http://10.10.1.10:3128",
 "https": "http://10.10.1.10:1080",
}

requests.get("http://www.zhidaow.com", proxies=proxies)

如果代理需要账户和密码,则需这样:

proxies = {
 "http": "http://user:pass@10.10.1.10:3128/",
}

2.10 请求头内容
请求头内容可以用r.request.headers来获取。

>>> r.request.headers
{'Accept-Encoding': 'identity, deflate, compress, gzip',
'Accept': '*/*', 'User-Agent': 'python-requests/1.2.3 CPython/2.7.3 Windows/XP'}

2.11 自定义请求头部
伪装请求头部是采集时经常用的,我们可以用这个方法来隐藏:

r = requests.get('http://www.zhidaow.com')
print r.request.headers['User-Agent']
#python-requests/1.2.3 CPython/2.7.3 Windows/XP

headers = {'User-Agent': 'alexkh'}
r = requests.get('http://www.zhidaow.com', headers = headers)
print r.request.headers['User-Agent']
#alexkh

2.12 持久连接keep-alive

requests的keep-alive是基于urllib3,同一会话内的持久连接完全是自动的。同一会话内的所有请求都会自动使用恰当的连接。

也就是说,你无需任何设置,requests会自动实现keep-alive。

3. 简单应用

获取网页返回码

def get_status(url):
 r = requests.get(url, allow_redirects = False)
 return r.status_code

print get_status('http://www.zhidaow.com') 
#200
print get_status('http://www.zhidaow.com/hi404/')
#404
print get_status('http://mengtiankong.com')
#301
print get_status('http://www.baidu.com/link?url=QeTRFOS7TuUQRppa0wlTJJr6FfIYI1DJprJukx4Qy0XnsDO_s9baoO8u1wvjxgqN')
#302
print get_status('http://www.huiya56.com/com8.intre.asp?46981.html')
#500
Python 相关文章推荐
python ElementTree 基本读操作示例
Apr 09 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
用Python的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
python自定义类并使用的方法
May 07 Python
用Python解决计数原理问题的方法
Aug 04 Python
通过Python实现自动填写调查问卷
Sep 06 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
Python登录系统界面实现详解
Jun 25 Python
Python的缺点和劣势分析
Nov 19 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 #Python
python模块简介之有序字典(OrderedDict)
Dec 01 #Python
Python中字符串的修改及传参详解
Nov 30 #Python
简单谈谈Python中的闭包
Nov 30 #Python
浅析Python中yield关键词的作用与用法
Nov 29 #Python
Python中 Lambda表达式全面解析
Nov 28 #Python
利用Python抓取行政区划码的方法
Nov 28 #Python
You might like
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
微信小程序new Date()方法失效问题解决方法
2019/07/29 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
python关闭windows进程的方法
2015/04/18 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
python 实现逻辑回归
2020/12/30 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
计算机毕业生自荐信
2014/06/12 职场文书
2014年工程工作总结
2014/11/25 职场文书
向女朋友道歉的话
2015/01/20 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
七夕情人节问候语
2015/11/11 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书