鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 6

[已解决]python爬取下载电影

[复制链接]
发表于 2023-5-3 19:44:46 | 显示全部楼层 |阅读模式
30鱼币
想问一下我在合并ts文件这步哪里出现了问题,跑出来是乱码而且也得不到合并后的文件(代码如下,完整文件代码在附件)
#开始合并TS文件形成一个完整的电影
def merge():
    file_names=[]
    with open("ts_file.txt",mode="r",encoding="utf-8") as f:
        for l in f:
            if l.startswith("#"):
                continue
            else:
                file_name = l.split('/')[-1].strip("\n")
                file_names.append(file_name)
        # print(file_names)
        now_dir = os.getcwd()
        os.chdir('./ts_s/')
        temp = []
        n = 1
        for i in range(len(file_names)):
            name = file_names[i]
            temp.append(name)
            if i != 0 and i % 100 == 0:
                names ="+".join(temp)
                os.system(f'copy /b {names} {n}.ts')
                n = n+1
                temp=[]
            else:
                continue
        names = "+".join(temp)
        os.system(f'copy /b {names} {n}.ts')
        n = n + 1

        temp_2 = []
        for i in range(1,n+1):
            temp_2.append(f'{i}.ts')
            files = "+".join(temp_2)
            os.system(f'copy /b {files} 素媛.mp4')
        os.chdir(now_dir)
        print("welcome to my wanderland!")
最佳答案
2023-5-3 19:44:47
这段代码的主要问题在于你使用了 Windows 的  copy /b  命令来合并文件。Python 脚本应该是跨平台的,所以我们可以用 Python 自带的文件操作来实现合并功能。另外,注意在合并所有分段文件之前,先合并每100个分段文件的操作可能是多余的。你可以尝试以下修改后的代码:
import os

# 开始合并TS文件形成一个完整的电影
def merge():
    file_names = []
    with open("ts_file.txt", mode="r", encoding="utf-8") as f:
        for l in f:
            if l.startswith("#"):
                continue
            else:
                file_name = l.split('/')[-1].strip("\n")
                file_names.append(file_name)
        # print(file_names)

    now_dir = os.getcwd()
    os.chdir('./ts_s/')

    with open('素媛.mp4', 'wb') as output:
        for name in file_names:
            with open(name, 'rb') as input:
                output.write(input.read())

    os.chdir(now_dir)
    print("welcome to my wanderland!")

这个修改后的代码使用了 Python 的  open()  函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows 上。现在这段代码应该能够正确合并所有的 TS 文件,并将它们存储到一个名为 '素媛.mp4' 的文件中。

电影下载.rar

1.61 KB, 下载次数: 3

最佳答案

查看完整内容

这段代码的主要问题在于你使用了 Windows 的 copy /b 命令来合并文件。Python 脚本应该是跨平台的,所以我们可以用 Python 自带的文件操作来实现合并功能。另外,注意在合并所有分段文件之前,先合并每100个分段文件的操作可能是多余的。你可以尝试以下修改后的代码: 这个修改后的代码使用了 Python 的 open() 函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-3 19:44:47 | 显示全部楼层    本楼为最佳答案   
这段代码的主要问题在于你使用了 Windows 的  copy /b  命令来合并文件。Python 脚本应该是跨平台的,所以我们可以用 Python 自带的文件操作来实现合并功能。另外,注意在合并所有分段文件之前,先合并每100个分段文件的操作可能是多余的。你可以尝试以下修改后的代码:
import os

# 开始合并TS文件形成一个完整的电影
def merge():
    file_names = []
    with open("ts_file.txt", mode="r", encoding="utf-8") as f:
        for l in f:
            if l.startswith("#"):
                continue
            else:
                file_name = l.split('/')[-1].strip("\n")
                file_names.append(file_name)
        # print(file_names)

    now_dir = os.getcwd()
    os.chdir('./ts_s/')

    with open('素媛.mp4', 'wb') as output:
        for name in file_names:
            with open(name, 'rb') as input:
                output.write(input.read())

    os.chdir(now_dir)
    print("welcome to my wanderland!")

这个修改后的代码使用了 Python 的  open()  函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows 上。现在这段代码应该能够正确合并所有的 TS 文件,并将它们存储到一个名为 '素媛.mp4' 的文件中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-3 19:45:29 | 显示全部楼层
您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得不到合并后的文件。根据您提供的完整代码,猜测问题可能出在文件编码上,建议修改以下这行代码: with open("ts_file.txt",mode="r",encoding="utf-8") as f: 将其中的"utf-8"修改为 GBK 或者 utf-8-sig(根据您的电脑配置不同而不同),尝试重新运行代码。另外也需要注意,文件路径中的'/'应该改为'\',否则可能会导致程序找不到文件。希望我的回答能帮到您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-3 20:04:41 | 显示全部楼层
isdkz 发表于 2023-5-3 19:46
这段代码的主要问题在于你使用了 Windows 的  copy /b  命令来合并文件。Python 脚本应该是跨平台的,所以 ...

谢谢你,你的代码是可行的。但是我有一点想知道为什么我原来的不行,我的系统是windows,问题是出在哪了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-3 20:10:03 | 显示全部楼层
isdkz 发表于 2023-5-3 19:46
这段代码的主要问题在于你使用了 Windows 的  copy /b  命令来合并文件。Python 脚本应该是跨平台的,所以 ...

哦!好像确实是上边那位老师说的问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-3 20:14:56 | 显示全部楼层
陶远航 发表于 2023-5-3 19:45
您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得 ...

谢谢你!我把utf-8改了之后就可以正常的运行.我还有一个小问题就是,我在前面打开这个文件进行所有ts文件下载的时候使用的编码方式也是utf-8,那时候就没有问题,想问一下为什么会出现这样的差异呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-3 20:25:04 | 显示全部楼层
陶远航 发表于 2023-5-3 19:45
您好!您在合并TS文件这部分代码中遇到了问题,代码看起来没有什么明显错误,但输出结果却是乱码,并且也得 ...

欧不对,应该不是编码的问题,我发现了我代码的一个小错误,前面在进行ts文件命名的时候后缀重复了两次,然后我在这部分ts文件合并的时候是按照没有重复后缀去查找的,所以查找不到导致没有任何合并文件的出现。把上述问题修改过后是能够正常的进行合并下载的,谢谢你的回复!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 09:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表