为什么crontab里面执行的命令和手打执行的效果不一样

我用crontab创建一个爬b站视频的脚本,脚本里面调用了Python文件。这个脚本执行正常,但是Python文件并不会执行成功。
脚本文件 /usr/local/bin/bilibili.sh
内容:
python3 /usr/local/bin/main.py && echo "download_yes" >> /var/log/bilibili.log

main.py的内容
def download_videos(vid):

url_headers="https://www.bilibili.com/video/"
os.system("youtube-dl -i "+url_headers+vid)

for a in range(1,2):

    url="https://api.bilibili.com/x/v3/fav/resource/list?media_id=1289157349&pn=%s&ps=20&keyword" \
        "=&order=mtime&type=0&tid=0&platform=web&jsonp=jsonp"%a

    request = urllib.request.Request(url,headers=head_)
    response=urllib.request.urlopen(request)
    html=response.read().decode("utf-8")
    json_data=json.loads(html)
    print(json_data)


    for i in        json_data["data"]["medias"]:
        print(i["title"])
        print(i["bv_id"])
        try:
            fo = open("/var/log/bilibili.log", "a", encoding="utf-8")
            fo.write("python")
            fo.write(i["title"])
            fo.write(str(datetime.datetime.now()))
            fo.write("\n")
            fo.close()
            download_videos(i["bv_id"])



        except:
            fo = open("/var/log/bilibili_error.log", "a", encoding="utf-8")
            fo.write(i["title"]+"下载失败")
            fo.write("\n")
            fo.close()