- get请求
import requests
data = {
'name': 'germey',
'age': 25
}
r = requests.get('https://www.httpbin.org/get', params=data)
print(r.json())
print(r.text)
上面把URL参数以字典的形式传给get方法的params参数,可以自动构造成标准的get请求URL
返回值是JSON格式的字符串
可以调用json()方法将字符串转化成字典,要求该字符串必须是JSON格式的
使用正则抓取网页
import requests
import re
r = requests.get('https://ssr1.scrape.center/')
pattern = re.compile('(.*?)', re.S)
titles = re.findall(pattern, r.text)
print(titles)
抓取二进制数据(添加请求头)
import requests
import re
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
r = requests.get('https://ssr1.scrape.center/', headers=headers)
pattern = re.compile('(.*?)', re.S)
titles = re.findall(pattern, r.text)
print(titles)
# 获取二进制数据
print(r.content)
with open('favicon.ico', 'wb') as fp:
fp.write(r.content)
- POST请求
基本与get请求一致
requests库提供了一个内置状态码查询对象requests.codes,可以通过比较内置状态码和返回码是否一致来判断。比如判断请求是否成功:
import requests
r = requests.get('https://ssr1.scrape.center/')
exit() if not r.status_code == requests.codes.ok else print('Requests Successfully')
- 文件上传
# 文件上传
import requests
files = {'file': open('favicon.ico', 'rb')}
r = requests.post('https://www.httpbin.org/post', files=files)
print(r.text)
使用post请求提交给服务器的时候将这个文件也一并上传。上传文件后,网站会返回响应,响应中包含files字段和form字段,其中form字段是空的,证明文件上传部分会单独用一个files字段来标识。
- Cookie
# 打印Cookie
import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
print(key + ':' + value)
首先我们调用了cookie属性拿到cookie,发现是RequestCookieJar类型,然后调用items()方法将Cookie转化为由元组组成的列表,遍历输出每一条Cookie的键与值。
也可以使用Cookie维持登录状态,只需要将Cookie放到headers中,在请求的时候添加headers参数即可。
还可以使用requests.cookies.RequestsCookieJar()构建一个cookie对象,并把cookie的key&value通过这个对象的set(key, value)方法传进去,最后通过请求参数cookies将这个cookie对象传上去。
- session维持
import requests
# 创建一个session
s = requests.Session()
# 通过get请求设置一个cookie,key为number,value为12345678
s.get('https://www.httpbin.org/cookies/set/number/12345678')
r = s.get('https://www.httpbin.org/cookies')
print(r.text())
同一个session可以拿到相同的cookie,session用来模拟在一个浏览器中打开同一个网站的不同页面
- SSL证书验证
当访问一个协议为HTTPS的URL时,如果该网站没有设置好HTTPS证书,请求的时候会抛出SSLError错误,因为请求URL的证书是无效的,可以通过不验证证书和忽略警告来屏蔽,也可以通过将警告写入日志的方式忽略警告。
也可以通过请求参数cert来指定本地证书用作客户端证书。
import requests
from requests.packages import urllib3
logging.captureWarnings(True)
urllib3.disable_warnings()
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
- 身份验证
使用requests内置认证进行身份验证(还可以使用OAuth1认证,需安装requests_oauthlib)
# 身份验证
import requests
from requests.auth import HTTPBasicAuth
# 使用requests库自带身份验证功能
r = requests.get('https://ssr3.scrape.center/', auth=HTTPBasicAuth('admin', 'admin'))
# 直接传元组会默认使用HTTPBasicAuth这个类认证
r = requests.get('https://ssr3.scrape.center/', auth=('admin', 'admin'))
print(r.status_code)
- 代理设置
# 代理
import requests
proxies = {
'https': 'http://10.10.10.10:8080',
'http': 'http://10.10.10.10:8080'
}
requests.get('http://www.httpbin.org/get', proxies=proxies)
- 关于Prepared Request
使用requests库的get或post请求原理:requests在发送请求时,在内部构造了一个Request对象,并给这个对象赋予各种参数比如url、data、headers等,然后把这个对象发送出去,请求成功后获取响应会得到一个response对象,解析这个response对象即可。
而这个Request对象就是Prepared Request类型的对象
# 直接构造Prepared Request对象
from requests import Request, Session
url = 'https://www.httpbin.org/post'
data = {'name': 'germey'}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
}
s = Session()
req = Request('POST', url=url, data=data, headers=headers)
# 调用Session类的prepare_request方法将其转换成一个Prepared Request对象
prepped = s.prepare_request(req)
# 调用Session类的send方法发送就可以得到一个response对象的返回值
r = s.send(prepped)
print(r.text)