ssr3

发布时间 2023-07-10 22:32:09作者: 乐之之

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()
# 具体解析方式就不再多赘述了,想看的可以自行到前面两节查看解析函数

  成功返回响应数据,效果如下: