目录
安装
pip install requests
请求
GET请求
【示例】如下:
import requests
r=requests.get('http://baidu.com')
print(r.text)
get请求携带参数
【示例】如下:
#方式一
url="http://httpbin.org/get?name=germey&age=25"
#参数是name=germey 和age=25
#可以直接请求
import requests
req =reqquests.get(url)
print(req.text)
#方式二
import requests
url="http://httpbin.org/get"
data={
'name': 'germey',
'age': 25
}
req=requests.get(url,params=data)
print(req.text) #如果返回格式是html格式,使用此方法
print(req.json()) #如果返回格式是json格式,使用此方法
注:如果请求的地址为图片或者视频地址,那么返回将是二进制,并写入文件中,如上述代码如果要获取二进制内容,打印时是:req.content
POST请求
【示例】如下:
import requests
data = {'name': 'germey', 'age': '25'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)
响应
【示例】如下:
import requests
r = requests.get('https://static1.scrape.cuiqingcai.com/')
print(type(r.status_code), r.status_code) #获取请求状态码
print(type(r.headers), r.headers) #输出响应头部信息
print(type(r.cookies), r.cookies) #输出cookies属性
print(type(r.url), r.url) #输出请求url地址
print(type(r.history), r.history) #输出history属性得到请求历史
高级用法
文件上传
我们知道requests可以模拟提交一些数据,假如网站需要上传文件,我们也可以用它来实现。
【示例】如下:
import requests
files = {'file': open('favicon.ico', 'rb')} #可以是图片或者文件
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
Cookies
如果要用requests获取和设置Cookies也非常方便
【示例】如下:
import requests
r = requests.get('http://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
print(key + '=' + value)
利用cookies模拟登陆
【示例一】如下:
import requests
headers = {
'Cookie': 'cookies可以在浏览器里登陆,f12后可获取',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
}
r = requests.get('https://github.com/', headers=headers)
print(r.text)
执行后,可发现,登陆后可预览的内容,也已经可返回了。
【示例二】如下:
import requests
cookies = ’cookies可以在浏览器里登陆,f12后可获取‘
jar = requests.cookies.RequestsCookieJar()
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'
}
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
r = requests.get('https://github.com/', cookies=jar, headers=headers)
print(r.text)
示例二中,我们首先新建一个RequestCookiesJar对象,然后将复制下来的cookies利用split方法分割,接着利用set方法设置好每个Cookies的key和value,最后通过调用requests的get方法并传递给cookies参数即可。
测试后,可正常登陆。
Session维持
在requests中,如果利用get或post等方法可以做到模拟网页的请求,但是这实际是相当于不同的Session,相当于你打开了两个浏览器打开了不同的页面。
如果多次请求设置一样的cookies不就可以了吗?这样也是可以的,但是做起来比较繁琐,我们有更简单的方法。
解决这个问题的主要方法就是维持同一个session,相当于打开一个新的浏览器选项卡而不是新开一个浏览器,但不想每次都设置Cookies,那我们就选择新的利器-----》Session对象。
利用好它,我们可以方便地维护一个Seesion而且不用担心Cookies的问题,他会帮助我们自动处理好。
【示例】如下:
requests正常请求
import requests
requests.get('http://httpbin.org/cookies/set/number/123456789')
r = requests.get('http://httpbin.org/cookies')
print(r.text)
执行返回将为空,大家可以执行,看看。
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)
执行返回:
上述代码里面url是测试网址,利用Session,可以做到模拟同一个Session而不用担心Cookies的问题,通常用于模拟登陆成功之后再进行下一步的操作。大家可以在实际中,实验实验。
SSL证书验证
现在很多网站都要求使用https协议,但有些网站并没有设置好HTTPS证书,或者证书不被CA机构认可,这时候就会出现SSL证书错误提示。
一般我们需要在请求是加上verify=False即可
【示例】如下:
import requests
response = requests.get('https://static2.scrape.cuiqingcai.com/', verify=False)
print(response.status_code)
有时候这样直接请求,我们会发现一个警告,它建议我们给他指定证书,可以通过设置忽略警告的方式来屏蔽这个警告
【示例】如下:
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://static2.scrape.cuiqingcai.com/', verify=False)
print(response.status_code)
或者通过捕获警告日记的方式忽略警告
【示例】如下:
import logging
import requests
logging.captureWarnings(True)
response = requests.get('https://static2.scrape.cuiqingcai.com/', verify=False)
print(response.status_code)
身份认证
在访问某些设置了身份认证的网站时,有些网站会出现认证窗口,需要输入用户名和密码。
如果遇到这种情况,那就是这个网站启用了基本身份认证,英文叫做:HTTP Basic Access Authentication ,它是一种用来允许网页浏览器或其它客户端出现在请求时提供用户名和口令形式的身份凭证的一种登陆验证方式。
如果使用requests来爬取呢?
我们可以使用requests自带的身认证功能,通过auth参数即可设置。
【示例一】如下:
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=HTTPBasicAuth('admin', 'admin'))
print(r.status_code)
这个示例的网站用户名和密码都是admin,在这里我们可以直接设置。如果用户名和密码正确,那么请求时会自动认证成功,返回200状态码,认证失败,则返回401状态码。
如果参数都传入HTTPBasicAuth类,就显的比较繁琐,所以requests提供例更简单的写法,直接传入一个元组,会默认使用HTTPBasicAuth这类来认证。
【示例二】如下
import requests
r = requests.get('https://static3.scrape.cuiqingcai.com/', auth=('admin', 'admin'))
print(r.status_code)
还有其它认证方式,如OAuth认证,,这个需要单独安装OAuth包,安排命令:
pip3 install requests_oauthlib
使用OAuth认证方法如下:
import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.json'
auth = OAuth1('YOUR_APP_KEY', 'YOUR_APP_SECRET',
'USER_OAUTH_TOKEN', 'USER_OAUTH_TOKEN_SECRET')
requests.get(url, auth=auth)
具体用法,可以参考官方文档:https://requests-oauthlib.readthedocs.org/