作者的话
各位,好久不见呀,最近项目上比较慢,平时抽不出时间进行python的学习,也没有发布相关的文章,和大家分享,实在是抱歉。前段时间,我们对pyhton的基本语法,进行了学习,熟悉了python这种非常简便的语法格式,从今天开始我们就来体验python的另外一种魅力——库。想要灵活的使用python进行开发就必然要熟悉python的各个库(库很多,只能说用哪个就学习哪个),之前我们也或多或少介绍部分库的使用,由于我们这个是爬虫系列,那自然是学习爬虫使用较多的库,今天就开始第一个库requests的学习了。
requests的介绍
就一句话介绍:
requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。
说白了,就是发起http请求。
但是这个http请求里面就有很多东西了,后面我们会慢慢了解到。
我们要用这个库肯定就要安装的,一般情况下,python的内置库是不包括大多数的,我们通常都是需要用pip
进行安装,
pip install requests
requests的方法介绍
1、requests库的七个主要方法
方法 | 解释 |
---|---|
requests.request() | 构造一个请求,支持以下各种方法 |
requests.get() | 获取html的主要方法 |
requests.head() | 获取html头部信息的主要方法 |
requests.post() | 向html网页提交post请求的方法 |
requests.put() | 向html网页提交put请求的方法 |
requests.patch() | 向html提交局部修改的请求 |
requests.delete() | 向html提交删除请求 |
对于get、post、put、delete等这些http请求方式,你需要去简单了解下http相关知识,我们一般网页上常用get、post。
- requests.get()
发起get请求,最常用的方法,基本语法格式:
r=requests.get(url,params,**kwargs)
url
: 需要爬取的网站地址。
params
: 翻译过来就是参数, url中的额外参数,字典或者字节流格式,可选。
**kwargs
: 12个控制访问的参数
对于url,就比如http://baidu.com/, 这种的,实际浏览器输入的网址
params,就是需要传入的参数,拼接在url后面的,通过是字典类型传入
params = {
'keyword': 'test',
'pageIndex':0,
'pageSize':10
}
- kwargs,可以有可选参数输入
可选参数还是挺多的,我copy过来啦,最常用的可能是headers,proxies,timeout,cookies
data
:字典,字节序或文件对象,重点作为向服务器提供或提交资源是提交,需要和params进行区分,data提交的数据并不放在url链接里, 而是放在url链接对应位置的地方作为数据来存储。,它也可以接受一个字符串对象。
json
:json格式的数据, json合适在相关的html,http相关的web开发中非常常见, 也是http最经常使用的数据格式, 他是作为内容部分可以向服务器提交。
例如:kv = {”key1’: ‘value1’}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, json=kv)
headers
:字典是http的相关语,对应了向某个url访问时所发起的http的头i字段, 可以用这个字段来定义http的访问的http头,可以用来模拟任何我们想模拟的浏览器来对url发起访问。
例子: hd = {‘user-agent’: ‘Chrome/10’}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, headers=hd)
cookies
:字典或CookieJar,指的是从http中解析cookie
auth
:元组,用来支持http认证功能
files
:字典, 是用来向服务器传输文件时使用的字段。
例子:fs = {‘files’: open(‘data.txt’, ‘rb’)}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, files=fs)
timeout
: 用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间, 如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。
proxies
:字典, 用来设置访问代理服务器。
allow_redirects
: 开关, 表示是否允许对url进行重定向, 默认为True。
stream
: 开关, 指是否对获取内容进行立即下载, 默认为True。
verify
:开关, 用于认证SSL证书, 默认为True。
cert
: 用于设置保存本地SSL证书路径
通过上面就可以看出,requests库还是挺强大的,各种情况都考虑到了。
response对象
r=requests.get("http://www.baidu.com")
requests库请求返回的对象,用来接收相关返回。接着我们需要了解这个对象的常用属性:
属性 | 说明 |
---|---|
r.status_code | http请求的返回状态,若为200则表示请求成功。 |
r.text | http响应内容的字符串形式,即返回的页面内容 |
r.encoding | 从http header 中猜测的相应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | http响应内容的二进制形式 |
上面的描述非常清楚,通过这个对象我们可以了解到,这次请求是否成功,成功的话返回的内容,以及编码,这些都对我们后面分析返回的内容有帮助
简单代码示例
我们百度搜索的时候,你仔细会发现,网址部分会出现如下:
https://www.baidu.com/s?wd=KEYWORD
KEYWORD就是我们要所搜的内容
import requests
keyword='我们都要好好的'
try:
kv={'wd':keyword}
r=requests.get('https://www.baidu.com/s',params=kv)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(len(r.text))
except:
print("失败")
语法示例
- requests方法示例
requests.get(‘https://github.com/timeline.json’)# GET请求
requests.post(“http://httpbin.org/post”)# POST请求
requests.put(“http://httpbin.org/put”) # PUT请求
requests.delete(“http://httpbin.org/delete”) # DELETE请求
requests.head(“http://httpbin.org/get”) # HEAD请求
requests.options(“http://httpbin.org/get” )# OPTIONS请求
- response对象示例
r.encoding #获取当前的编码
r.encoding = 'utf-8'#设置编码
r.text#以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content#以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers#以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw#返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok# 查看r.ok的布尔值便可以知道是否登陆成功
#*特殊方法*#
r.json()#Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status()#失败请求(非200响应)抛出异常
- requests请求常用可选参数
import requests
url_params = {'key':'value'}#字典传递参数,如果值为None的键不会被添加到url中
data ={'playbody':'数据'}
headers = {
'content-type': 'application/json',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'
}
cookies = {'cookienamekey':'value'}
proxies = {
"http": "http://user:[email protected]:3128/",
}
r = requests.get('your url',
params = url_params, data = data,
headers = headers, cookies=cookies,
proxies=proxies)
print(r.url)
# your url?key=value
通过上面的完整代码示例,应该是大概了解requests传入可选参数的方法,这样子通过这个类库基本上网站的内容,都是可以访问到,但是部分网站做了反爬措施,会导致请求失败或者返回非预期内容
大家加油,我们下期再见!