7Python标准库系列之requests模块

简介:

Python标准库系列之requests模块


Requests is the only Non-GMO HTTP library for Python, safe for human consumption.

官方文档:http://docs.python-requests.org/en/master/


安装Requests模块

Requests模块官方提供了两种方式安装:

pip方式安装

1
pip install requests

源码方式安装

1
2
3
git clone git: / / github.com / kennethreitz / requests.git
cd requests
python setup.py install

验证是否安装成功

进入python解释的,导入模块试试,如果导入成功则安装成功,否则就需要检查那里执行错误了呢。

1
2
3
4
C:\Users\anshengme> python
Python  3.5 . 1  (v3. 5.1 : 37a07cee5969 , Dec   6  2016 01 : 54 : 25 ) [MSC v. 1900  64  bit (AMD64)] on win32
Type  "help" "copyright" "credits"  or  "license"  for  more information.
>>>  import  requests

环境准备

安装gunicornhttpbin

1
sudo pip3 install gunicorn httpbin

启动一个gunicornServer

1
2
3
4
5
   sudo gunicorn httpbin:app
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Starting gunicorn  19.6 . 0
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Listening at: https: / / blog.ansheng.me: 8000  ( 12175 )
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12175 ] [INFO] Using worker: sync
[ 2016 - 10 - 27  11 : 45 : 08  + 0800 ] [ 12178 ] [INFO] Booting worker with pid:  12178

打开浏览器输入``将会得到以下页面,相当于在本地启动一个http server便于学习requests模块

wKiom1kZEOSQbUI3AACSiuo4Ouk316.png

简单的一个requests小程序

下面的一个小程序会通过requests请求'https://blog.ansheng.me:8000/ip'这个URI链接,获取到对应的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
 
URL_IP  =  '
  
def  use_params_requests():
     # 参数
     params  =  { 'params1' 'Hello' 'params2' 'World' }
     # 发送请求
     response  =  requests.get(URL_IP, params = params)
     print ( "响应的状态码:" , response.status_code, response.reason)
     print ( "返回的头部:" , response.headers)
     print ( "把返回的数据转换为json:" , response.json())
     print ( "响应的文本:" , response.text)
     
if  __name__  = =  '__main__' :
     use_params_requests()

发送请求

通过GITHUB提供的API获取用户信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
import  json
 
URL  =  '
  
def  build_uri(endpoint):
     return  '/' .join([URL, endpoint])
     
def  better_print(json_str):
     return  json.dumps(json.loads(json_str), indent = 4 )
     
def  request_method():
     # 获取用户的所有信息
     response  =  requests.get(build_uri( 'users/anshengme' ))
     print (better_print((response.text)))
     
     print ( "\n" )
     
     # 获取用户的邮箱
     response  =  requests.get(build_uri( 'user/emails' ), auth = ( "anshengme.com@gmail.com" "xxxxxx" ))
     print (better_print((response.text)))
     
if  __name__  = =  '__main__' :
     request_method()

带参数的请求

1
2
3
4
5
6
7
8
9
10
11
# 使用params传参
def  params_request():
     response  =  requests.get(build_uri( 'users' ), params = { 'since' 11 })
     print (better_print(response.text))
     print (response.request.headers)
     print (response.url)
     
# 使用json传参方式
def  json_request():
     response  =  requests.get(build_uri( 'user' ), auth = ( "username" "email" ), json = { "name" "asdas" })
     print (better_print(response.text))

异常处理

1
2
3
4
5
6
7
8
9
def  timeout_request():
     try :
         response  =  requests.get(build_uri( 'user/emails' ), timeout = 10 )
         response.raise_for_status()
     except  Exception as e:
         print (e)
     else :
         print (response.text)
         print (response.status_code)

自定义request

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from  requests  import  Request, Session
 
def  hard_request():
     =  Session()
     # 创建请求
     headers  =  { 'User-Agent' 'fake1.3.4' }
     req  =  Request( 'GET' , build_uri( 'user/emails' ), auth = ( 'anshengme.com@gmail.com' 'xxxxxx' ), headers = headers)
     prepped  =  req.prepare()
     print ( "请求头》》" , prepped.headers)
     # 发送请求
     resp  =  s.send(prepped)
     print (resp.status_code)
     print (resp.request.headers)
     print (resp.text)

实例

下载图片/文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
from  contextlib  import  closing
 
# 流传输的模式
def  download_img():
     url  =  "http://www.sinaimg.cn/IT/cr/2016/0331/725124517.jpg"
     # headers = {
     #     'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}
     # response = requests.get(url, headers=headers, stream=True)
     response  =  requests.get(url, stream = True )
     print (response.status_code, response.reason)
     
     with  open ( 'github.jpg' 'wb' ) as fd:
         for  chunk  in  response.iter_content( 128 ):
             fd.write(chunk)
             
def  download_img_improved():
     url  =  "http://www.sinaimg.cn/IT/cr/2016/0331/725124517.jpg"
     with closing(requests.get(url, stream = True )) as response:
         # 打开并写入文件
         with  open ( 'github1.jpg' 'wb' ) as fd:
             for  chunk  in  response.iter_content( 128 ):
                 fd.write(chunk)
                 
download_img()
download_img_improved()

处理响应的事件钩子

1
2
3
4
5
6
7
8
9
10
11
12
#!/use/bin/env python3
# _*_ coding:utf-8 _*_
import  requests
 
def  get_key_info(response,  * args,  * * kwargs):
     print (response.headers[ "Content-Type" ])
     
def  main():
     requests.get( "https://www.baidu.com" , hooks = dict (response = get_key_info))
     
if  __name__  = =  "__main__" :
     main()









本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925733,如需转载请自行联系原作者
目录
相关文章
Python
13 0
|
1天前
|
JSON 数据格式 索引
python 又一个点运算符操作的字典库:Munch
python 又一个点运算符操作的字典库:Munch
10 0
|
1天前
|
开发者 Python
Python的os模块详解
Python的os模块详解
11 0
|
1天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
10 0
|
2天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
11 0
|
3天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
13 2
|
3天前
|
算法 Python
请解释Python中的关联规则挖掘以及如何使用Sklearn库实现它。
使用Python的mlxtend库,可以通过Apriori算法进行关联规则挖掘。首先导入TransactionEncoder和apriori等模块,然后准备数据集(如购买行为列表)。对数据集编码并转换后,应用Apriori算法找到频繁项集(设置最小支持度)。最后,生成关联规则并计算置信度(设定最小置信度阈值)。通过调整这些参数可以优化结果。
25 9
|
3天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
35 9
|
3天前
|
索引 Python
如何在Python中使用Pandas库进行季节性调整?
在Python中使用Pandas和Statsmodels进行季节性调整的步骤包括:导入pandas和seasonal_decompose模块,准备时间序列DataFrame,调用`seasonal_decompose()`函数分解数据为趋势、季节性和残差,可选地绘制图表分析,以及根据需求去除季节性影响(如将原始数据减去季节性成分)。这是对时间序列数据进行季节性分析的基础流程。
19 2
|
4天前
|
数据挖掘 API 数据安全/隐私保护
python请求模块requests如何添加代理ip
python请求模块requests如何添加代理ip

热门文章

最新文章