更新部分爬虫以兼容本地运行及数据库存储
This commit is contained in:
@@ -49,8 +49,27 @@ class BilibiliClient(AbstractApiClient):
|
||||
self.cookie_dict = cookie_dict
|
||||
|
||||
async def request(self, method, url, **kwargs) -> Any:
|
||||
async with httpx.AsyncClient(proxy=self.proxy) as client:
|
||||
response = await client.request(method, url, timeout=self.timeout, **kwargs)
|
||||
"""
|
||||
Basic HTTP request wrapper with retries for transient network errors.
|
||||
"""
|
||||
verify = getattr(config, "HTTPX_VERIFY", True)
|
||||
# 优先使用传入 proxy,其次是 config.HTTPX_PROXY,最后走系统环境变量
|
||||
proxy = self.proxy or getattr(config, "HTTPX_PROXY", "") or None
|
||||
|
||||
async with httpx.AsyncClient(proxy=proxy, timeout=self.timeout, verify=verify) as client:
|
||||
# 简单重试,处理短暂的连接失败
|
||||
last_exc: Optional[Exception] = None
|
||||
for attempt in range(3):
|
||||
try:
|
||||
response = await client.request(method, url, **kwargs)
|
||||
break
|
||||
except httpx.HTTPError as e:
|
||||
last_exc = e
|
||||
if attempt == 2:
|
||||
# 3rd failure -> give up
|
||||
utils.logger.error(f"[BilibiliClient.request] Network error on {method} {url}: {repr(e)}")
|
||||
raise DataFetchError(f"network error: {e}") from e
|
||||
await asyncio.sleep(1)
|
||||
try:
|
||||
data: Dict = response.json()
|
||||
except json.JSONDecodeError:
|
||||
|
||||
Reference in New Issue
Block a user