import requests import urllib.request import os def quest_find(quest_url, awme_id): params = {"id": awme_id} respon = requests.get(quest_url, params=params).json() return respon["data"], respon["code"] def re_down(url,filename): try: urllib.request.urlretrieve(url,filename) except urllib.error.ContentTooShortError: print ('Network conditions is not good. Reloading...') re_down(url,filename) # 获取视频URL,并下载 if __name__ == '__main__': quest_url = "http://discover-rpc.cmm-crawler-intranet.k8s.limayao.com/play_url" save_path = "/home/algodev/sujunbin/whisper/test_model/video%s" %time if not os.path.exists(save_path): os.mkdir(save_path) awme_ids = ['7119114587735100687'] with open('id_time.txt','r') as file: for line in file.readlines(): line = line.split() id = line[0] time1 = int(line[1]) if time1<10000: time ='<10s' elif 10000<=time1<20000: time='10-20s' elif 20000<=time1<30000: time='20-30s' elif 30000<=time1<40000: time='30-40s' elif 40000<=time1<50000: time='40-50s' elif 50000<=time1<60000: time='50-60s' elif 60000<=time1<90000: time='60-90s' elif 90000<=time1<120000: time='90-120s' elif 120000<=time1<180000: time='120-180s' elif time1>=180000: time='>180s' save_path = "/home/algodev/sujunbin/whisper/test_model/video%s" %time if not os.path.exists(save_path): os.mkdir(save_path) data_json, code = quest_find(quest_url, id) play_url = data_json['play_url'] video_name = id + '.mp4' save_video_path = os.path.join(save_path, video_name) re_down(data_json['play_url'], save_video_path) print(save_video_path) for i in range(len(awme_ids)): data_json, code = quest_find(quest_url, awme_ids[i]) play_url = data_json['play_url'] video_name = awme_ids[i] + '.mp4' save_video_path = os.path.join(save_path, video_name) urllib.request.urlretrieve(data_json['play_url'], save_video_path) print(save_video_path) print("done!")这段代码有什么问题
时间: 2024-02-14 13:19:30 浏览: 165
这段代码可能存在以下问题:
1. 缺少必要的模块导入语句,需要添加 `import time`。
2. 代码中的变量名 `awme_ids` 可能有误,应该改为 `aweme_ids`。
3. 在 `re_down()` 函数中,若下载失败会无限递归调用自身,可能导致内存溢出。建议添加一个计数器,若连续下载失败次数超过一定阈值,则放弃下载。
4. 在循环过程中,多次声明 `save_path` 变量,覆盖了之前的赋值,应该在循环外部声明。
5. 可能存在无法下载视频的情况,需要添加异常处理机制,例如 `urllib.error.HTTPError`、`urllib.error.URLError`、`socket.timeout` 等异常。
6. 代码中的请求 URL 是内网地址,无法在公网环境下使用。
7. 可能存在多个视频对应同一个保存路径的情况,应该在视频名中添加一个唯一标识,例如时间戳或视频 ID。
建议在代码中添加适当的注释和异常处理,以提高代码的可读性和健壮性。
相关问题
def quest_find(quest_url, awme_id): params = {"id": awme_id} respon = requests.get(quest_url, params=params).json() return respon["data"], respon["code"]这段代码有什么问题
这段代码可能会出现以下问题:
1. 没有导入 requests 库,所以需要先导入 requests 库。
2. 如果 `requests.get()` 请求失败,程序将会抛出异常,可以通过 `try-except` 语句来捕获异常并进行处理。
3. 如果 API 返回的 JSON 数据缺少 "data" 或 "code" 字段,程序将会在访问这些字段时抛出异常,所以需要在访问这些字段之前先判断它们是否存在。
以下是修改后的代码:
```python
import requests
def quest_find(quest_url, awme_id):
params = {"id": awme_id}
try:
respon = requests.get(quest_url, params=params).json()
if "data" in respon and "code" in respon:
return respon["data"], respon["code"]
else:
return None, None
except requests.exceptions.RequestException as e:
print(e)
return None, None
```
阅读全文