ssr3
我们来看一下,这同样是电影数据网站,数据内容相同,只是在其基础上加了登录验证,输入用户名和密码。如图所示:
那么这时候我们就需要了解到ssr3中提示到的HTTP Basic Authentication(基本身份认证),这是HTTP协议验证请求者身份的基本认证功能。这里,我们只需要适用urllib创建一个密码管理器,放入user和password。模拟客户端向服务器提交信息,再加载响应内容即可。
解决步骤:
1、提前登录该网页,登陆后复制其url和headers表单信息。
url = 'https://ssr3.scrape.center/page/1'
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
2、设置用户名和密码
username = 'admin'
password = 'admin'
3、发起请求,拿到返回的headers字典信息。
request = urllib.request.Request(url,headers=headers)
- 若我们将 username 写错,则运行结果为:HTTP Error 401: UNAUTHORIZED
4、创建一个密码管理器,将url、用户名和密码进行添加。
# 创建密码管理器
passmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# 因为我们一开始为空值,在这里也放的是空值
# 添加后将始终对URL使用此用户名/密码组合
passmgr.add_password(None, url, username, password)
5、创建AuthHandler,模拟客户端向服务器提交认证信息
# 创建AuthHandler
authhandler = urllib.request.HTTPBasicAuthHandler(passmgr)
6、定义opener对象,调用Handler并加载返回的内容。
- 自定义的 Opener 对象都由 OpenerDirector 加载不同的 Handler 来生成。
- 自定义 opener 需要先初始化一个 OpenerDirector,使用 build_opener 方法实现,这是一个使用调用单一函数调用多个 Handlers 生成 opener 实例的方法。
opener = urllib.request.build_opener(authhandler)
with opener.open(request) as response:
print(response.read().decode('utf-8'))
这样就可以获取返回的响应内容了。具体代码如下:
import urllib
from urllib import request
username = 'admin'
password = 'admin'
def ssr3():
url = 'https://ssr3.scrape.center/page/1'
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
resp = urllib.request.Request(url,headers=headers)
# 创建密码管理器
passmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# 因为我们一开始为空值,在这里也放的是空值
# 添加后将始终对URL使用此用户名/密码组合
passmgr.add_password(None, url, username, password)
# 创建AuthHandler(身份验证处理程序)
authhandler = urllib.request.HTTPBasicAuthHandler(passmgr)
opener = urllib.request.build_opener(authhandler)
with opener.open(resp) as response:
print(response.read().decode('utf-8'))
ssr3()
# 具体解析方式就不再多赘述了,想看的可以自行到前面两节查看解析函数
成功返回响应数据,效果如下:
标签:url,request,urllib,headers,ssr3,opener From: https://www.cnblogs.com/LoLong/p/17542533.html