Infi-chu:
http://www.cnblogs.com/Infi-chu/
一、基本用法:
1. 安装:
pip install requests
2. 例子:
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print(type(r)) # 类型是str(JSON格式)
print(r.status_code)
print(r.text)
print(r.cookies)
【注】其余请求方法也是一样的
r = requests.post(url)
r = requests.put(url)
r = requests.delete(url)
r = requests.head(url)
r = requests.options(url)
3. GET请求:
- 例子
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print(r.text)
若想在url中添加参数有两种方式:
a. 直接添加
r = requests.get(url+参数)
b. 通过params参数添加
import requests
data = {"name":"Infi-chu","age":"23"}
r = requests.get(url,params=data)
网页的返回类型是str类型,是JSON格式的,我们可以直接调用 json()方法
若返回结果不是JSON格式,便会出现解析错误,抛出 json.decode.JSONDecodeError异常
- 抓取网页
可使用正则表达式和headers。
- 抓取二进制数据
图片、音频、视频等文件本质上都是二进制码组成的。
抓取GitHub图标:
import requests
r = requests.get("http://github.com/favicon.ico")
print(r.text)
print(r.content)
# 保存图片
with open('favicon.ico','wb') as f:f.write(r.content)
- 添加headers
在爬取知乎时必须在User-Agent中加入信息,否则不能爬取,会被拦截
4. POST请求
improt requests
data = {'name':'Infi-chu','age'='23'}
r = requests.post('http://www.baidu.com',data=data)
成功后会在form中看到所提交的数据(F12查看)
5. 响应
发送数据后,得到的就是响应,我们使用text和content获取了内容,下面是另外的信息:
import requests
r = requests.get('http://www.baidu.com')
print(type(r.status_code),r.status_code)
print(type(r.headers),r.headers)
print(type(r.cookies),r.cookies)
print(type(r.history),r.history)
print(type(r.url),r.url)
headers 属性返回 CaseInsensitiveDict 类型
cookies 属性返回 RequestsCookieJar 类型
二、高级用法:
1.文件上传
import requests
f = {'file':open('favicon.ico','rb')}
r = requests.post(url,files=f)
print(r.text)
2.Cookies
import requests
r = requests.get(url)
print(r.cookies)
for k,v in r.cookies.items():print(k+"="+v)
3.会话维持
使用Session对象
import requests
s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
r = s.get('http://httpbin.org/cookies')
print(r.text)
4.SSL证书验证
requests提供了证书验证的功能,使用verify参数控制是否检查此证书,默认是True,会自动验证
5.代理设置
对于某些网站,在测试的时候请求几次,能正常获取信息,但是一旦大规模爬取,可能会出现验证码或直接封掉IP,导致一段时间内无法访问
代理设置:
import requests
proxy = {'http':'http://ip:port','https':'https://ip:port'}
requests.get('https://www.taobao.com',proxies=proxy)
6.超时设置
import requests
r = requests.get('https://www.taobao.com',timeout=1)
print(r.status_code)
7.身份认证
import requests
from requests.auth import HTTPBasicAuth
r = requests.get(url,auth=HTTPBasicAuth('username','password'))
print(r.status_code)# 可简写为
r = requests.get(url,auth=('username','password'))
print(r.status_code)
# 也提供了OAuth认证,使用 pip3 install requests_oauthlib
8.Prepared Request
将请求表示为数据结构,这个数据结构叫Prepared Request