Python3爬虫(四)请求库的使用requests
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