playwright——实现bilibili客户端

class BilibiliClient:
    def __init__(
            self,
            timeout=10,
            proxies=None,
            *,
            headers: Dict[str, str],
            playwright_page: Page,
            cookie_dict: Dict[str, str],
    ):
        self.proxies = proxies
        self.timeout = timeout
        self.headers = headers
        self._host = "https://api.bilibili.com"
        self.playwright_page = playwright_page
        self.cookie_dict = cookie_dict

这段代码定义了一个名为BilibiliClient的类,它具有一个初始化方法__init__。让我来逐行解释一下:

  1. def __init__(self, timeout=10, proxies=None, *, headers: Dict[str, str], playwright_page: Page, cookie_dict: Dict[str, str]): - 这是初始化方法的定义,它接受一些参数,包括timeoutproxiesheadersplaywright_pagecookie_dict。其中headersplaywright_pagecookie_dict是必须使用关键字参数传入的。

  2. self.proxies = proxies - 这行代码将传入的proxies赋值给类的proxies属性。

  3. self.timeout = timeout - 这行代码将传入的timeout赋值给类的timeout属性。

  4. self.headers = headers - 这行代码将传入的headers赋值给类的headers属性。

  5. self._host = "https://api.bilibili.com" - 这行代码将字符串"https://api.bilibili.com"赋值给类的_host属性。

  6. self.playwright_page = playwright_page - 这行代码将传入的playwright_page赋值给类的playwright_page属性。

  7. self.cookie_dict = cookie_dict - 这行代码将传入的cookie_dict赋值给类的cookie_dict属性。

这个类的作用可能是作为一个Bilibili的客户端,用于与Bilibili的API进行交互,其中包括设置请求的超时时间、代理、请求头、页面对象和Cookie等信息。

    async def request(self, method, url, **kwargs) -> Any:
        async with httpx.AsyncClient(proxies=self.proxies) as client:
            response = await client.request(
                method, url, timeout=self.timeout,
                **kwargs
            )
        data: Dict = response.json()
        if data.get("code") != 0:
            raise DataFetchError(data.get("message", "unkonw error"))
        else:
            return data.get("data", {
   })

这段代码定义了一个名为request的异步方法,用于向指定的URL发起HTTP请求。让我来逐行解释一下:

  1. async def request(self, method, url, **kwargs) -> Any: - … … 这是一个异步方法的定义,它接受method(请求方法)、url(请求的URL)和kwargs(其他请求参数)作为参数,并且返回一个Any类型的值。

  2. async with httpx.AsyncClient(proxies=self.proxies) as client: - 这行代码创建了一个异步的httpx.AsyncClient对象,用于发送HTTP请求,并使用了类中定义的proxies属性作为代理。

  3. response = await client.request(method, url, timeout=self.timeout, **kwargs) - 这行代码使用client对象发送HTTP请求,其中包括指定的请求方法、URL、超时时间和其他参数。

  4. data: Dict = response.json() - 这行代码将HTTP响应的JSON数据解析为Python字典类型,并赋值给data变量。

  5. if data.get("code") != 0: - 这行代码检查响应数据中的code字段是否为0,如果不是,则抛出一个DataFetchError异常,异常消息为响应数据中的message字段,如果没有则为"unknown error"。

  6. return data.get("data", {}) - 如果响应数据中的code字段为0,则返回响应数据中的data字段,如果没有则返回一个空字典。

整体来说,这段代码的作用是向指定的URL发起HTTP请求,并处理响应数据,如果响应中的code字段不为0,则抛出一个自定义的DataFetchError异常,否则返回响应数据中的data字段。

    async def pre_request_data(self, req_data: Dict) -> Dict:
        """
        发送请求进行请求参数签名
        需要从 localStorage 拿 wbi_img_urls 这参数,值如下:
        https://i0.hdslb.com/bfs/wbi/7cd084941338484aae1ad9425b84077c.png-https://i0.hdslb.com/bfs/wbi/4932caff0ff746e
  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值