鱼C论坛

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

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

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

  29.         temp_2 = []
  30.         for i in range(1,n+1):
  31.             temp_2.append(f'{i}.ts')
  32.             files = "+".join(temp_2)
  33.             os.system(f'copy /b {files} 素媛.mp4')
  34.         os.chdir(now_dir)
  35.         print("welcome to my wanderland!")
复制代码

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

  1. import os

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

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

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

  19.     os.chdir(now_dir)
  20.     print("welcome to my wanderland!")
复制代码


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

电影下载.rar

1.61 KB, 下载次数: 3

最佳答案

查看完整内容

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

使用道具 举报

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

  1. import os

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

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

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

  19.     os.chdir(now_dir)
  20.     print("welcome to my wanderland!")
复制代码


这个修改后的代码使用了 Python 的  open()  函数来以二进制模式读取和写入文件。这样,你就可以在不同的操作系统上运行这段代码,而不仅仅是在 Windows 上。现在这段代码应该能够正确合并所有的 TS 文件,并将它们存储到一个名为 '素媛.mp4' 的文件中。
小甲鱼最新课程 -> https://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(根据您的电脑配置不同而不同),尝试重新运行代码。另外也需要注意,文件路径中的'/'应该改为'\',否则可能会导致程序找不到文件。希望我的回答能帮到您!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谢谢你,你的代码是可行的。但是我有一点想知道为什么我原来的不行,我的系统是windows,问题是出在哪了呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

哦!好像确实是上边那位老师说的问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 04:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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