Ipidea丨Python使用requests库

作者:IPIDEA

2020-03-23 10:13:11

## Python使用requests库

---
使用python进行网络数据采集,最经常会使用requests模块,requests相比urllib来说方便了不少,特别是对Cookies、代理等方面的设置操作。

安装requests库
```bash
pip3 install requests
```

### GET请求
  使用requests库进行GET请求非常简单,几行代码就能实现最基本的请求:
```python
import requests

url = "http://www.baidu.com"
r = requests.get(url)
print(r.text)
```
除了打印出响应的结果,我们也可以通过响应状态码来判断请求是否成功:
```python
print(r.status_code)
```

  如果访问的链接需要带请求参数,则可以通过这样实现:
```python
param = {'wd':'python'}
r = requests.get(url='http://dict.baidu.com/s',params=param)
```


 此外,访问时如果需要包含请求头等信息,可以先构造一个完整的请求头字典,传入方法内:
```python
headers = {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "www.baidu.com", 
    "User-Agent": "python-requests/2.22.0"
}
r = requests.get(url='http://www.baidu.com',headers=headers)
print(r.text)
print(r.content)
```
上面的示例中,r.text返回的编码之后的页面数据,而r.content是二进制形式的原始数据,如获取的是图片,音频,视频等数据,就需要对二进制数据保存为特定的格式。
成功获得请求结果之后,我们就可以对返回的数据进行解析了,通常返回的是字符串形式的HTML源码,最简单直接的方法是我们可以用正则表达式匹配出想要的内容;除此之外,可以借助第三方库,利用Xpath表达式或CSS选择器等按HTML标签选择想要获得的内容。当然现在越来越多的页面采用js等脚本语言进行异步渲染,这样获取的源码并不是完整的HTML代码,需要做另外的处理。


### POST请求
  使用post请求多数情况下需要传递请求参数,requests中可以直接以字典的形式构造请求参数:
```python
import requests

data = {"name":"John","age":"35"}
r = requests.post("http://httpbin.org/post",data=data)
print(r.text)
```
当然有时传参的方式可能有有所不同,具体还要根据网站接口有所区别。
通常POST请求返回的结果可能是json的形式,所以除了text,content形式处理响应结果外,还有一种直接转换为json格式的方法:
```python
print(r.json())
```
当然用第三方json库对r.text做处理转换也是可以的:
```python
import json
print(json.loads(r.text))
```
除了用于请求数据,POST在Form表单、文件上传等情况下也会使用。

### Session
在网页请求时,除了直接使用GET,或POST方法请求数据,有时还有遇到一些特殊情况。其中有一种情况是一种异步加载的网页,在正常请求时先采用GET获取部分的页面信息,再通过POST请求填充页面其余的部分内容,而这时往往需要访问时保持会话维持,它会在会话内保持Cookies不变,这就需要用到Session对象。
在requests库中建立会话访问非常简单直接:

```python
import requests

session = requests.session()
data = {"param1":"a","param2":"b"}
r1 = session.get("http://httpbin.org/cookies")
r2 = session.post("http://httpbin.org/post")
print(r2.json())
```
在使用Session时,headers和Cookies会根据响应自动有所变化,并在下次请求时保持,此时可以通过命令查看某一时刻的headers和Cookies的具体情况:
```python
print(session.headers)
print(session.cookies)
```

### 结语
  本次简单介绍了python中requests库常用的三种方法和使用情景,还需要读者在实际应用时根据情况有所变化和累积使用经验。


支持全球240个国家地区,每日超9000万住宅动态IP资源,欢迎访问:www.ipidea.net。

*ipidea提供的服务必须在境外网络环境下使用

热门资讯