爬虫requests高级用法二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/86351074

一 证书

1 点睛

requests还提供了证书验证的功能。当发送HTTP请求的时候,它会检查SSL证书,我们可以使用verify参数控制是否检查此证书。其实如果不加verify参数的话,默认是True,会自动验证。

很早之前,12306的证书没有被官方CA机构信任。访问该网站,会出现如下截图:

我们通过代码看看,现在是否还存在这个问题。

2 代码1

import requests

response = requests.get('https://www.12306.cn')
print(response.status_code)

3 结果2

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_2_1.py
200

说明现在证书没问题了

3 代码2

import requests
from requests.packages import urllib3

# 可以通过设置忽略警告的方式来屏蔽这个警告
urllib3.disable_warnings()
# 如果请求一个HTTPS站点,但是证书验证错误的页面时,
# 就会报错误,那么如何避免这个错误呢?很简单,把verify参数设置为False即可。
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

4 结果2

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_2_1.py
200

二 超时设置

1 代码

import requests
# 在本机网络状况不好或者服务器网络响应太慢甚至无响应时,
# 我们可能会等待特别久的时间才可能收到响应,甚至到最后收不到响应而报错。
# 为了防止服务器不能及时响应,应该设置一个超时时间,
# 即超过了这个时间还没有得到响应,那就报错。
# 这需要用到timeout参数。这个时间的计算是发出请求到服务器返回响应的时间。
# 我们可以将超时时间设置为1秒,如果1秒内没有响应,那就抛出异常。
r = requests.get("https://www.taobao.com", timeout=1)
print(r.status_code)

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_2_1.py
200

3 实例

import requests
# timeout将用作连接和读取这二者的timeout总和
r = requests.get('https://www.taobao.com', timeout=(5,11))
# 如果想永久等待,可以直接将timeout设置为None,或者不设置直接留空,因为默认是None。
# 这样的话,如果服务器还在运行,但是响应特别慢,那就慢慢等吧,它永远不会返回超时错误的
r = requests.get('https://www.taobao.com', timeout=None)

r = requests.get('https://www.taobao.com')
print(r.status_code)

三 身份认证

在访问网站时,我们可能会遇到这样的认证页面。

此时可以使用requests自带的身份认证功能。

import requests
from requests.auth import HTTPBasicAuth

r = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))
# 如果用户名和密码正确的话,请求时就会自动认证成功,会返回200状态码,如果认证失败,则返回401状态码。
print(r.status_code)
# #########################################################################################
import requests
# 如果参数都传一个HTTPBasicAuth类,就显得有点烦琐了,所以requests提供了一个更简单的写法,
# 可以直接传一个元组,它会默认使用HTTPBasicAuth这个类来认证。
r = requests.get('http://localhost:5000', auth=('username', 'password'))
print(r.status_code)

四 Prepared Request

1 代码

from requests import Request, Session

url = 'http://httpbin.org/post'
data = {
    'name': 'germey'
}
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'
}
s = Session()
# 引入了Request,然后用url、data和headers参数构造了一个Request对象,
# 这时需要再调用Session的prepare_request()方法将其转换为一个Prepared Request对象,
# 然后调用send()方法发送即可,
req = Request('POST', url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

2 运行结果

E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_2_1.py
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "germey"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Content-Length": "11",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "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"
  },
  "json": null,
  "origin": "106.36.218.77",
  "url": "http://httpbin.org/post"
}

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/86351074