我这里有一个网站,其链接结构如下
https://example.com/assets/contents/1627347928.mp4
打印文件是否存在
import requests
names = [ 1627347923, 1627347924, 1627347925]
base = 'https://example.com/assets/contents/{}.mp4'
for item in names:
link = base.format(item)
print(link)
r = requests.head(link, allow_redirects=True)
if r.status_code == 200:
print("found {}.mp4".format(item))
#open('{}.mp4'.format(item), 'wb').write(r.content)
else:
print("File no found or error getting headers")
或者尝试下载
import requests
names = [ 1627347923, 1627347924, 1627347925]
base = 'https://example.com/assets/contents/{}.mp4'
for item in names:
link = base.format(item)
print(link)
# uncomment below to download
#r = requests.get(link, allow_redirects=True)
#open('{}.mp4'.format(item), 'wb').write(r.content)
是的,你可以运行一个循环,检查状态代码,或者如果 requests.get() 抛出一个错误,你会返回并因此获取所有文件,但是有一些问题可能会阻止你选择它
您的文件格式为“1627*****.mp4”,这意味着 for 循环将检查 10^6 个条目,如果所有 * 都是数字,效率不高。如果您打算包含字符和特殊字符,效率会非常低。
如果将来你有超过 10^6 个文件怎么办?您的格式必须更改,因此您的代码也必须更改。
一个更简单、直接和高效的解决方案是有一个地方来存储您的数据、文件或更好的数据库,您可以在其中查询并获取所有文件。您只需运行查询即可获取必要的详细信息。
此外,404 错误意味着找不到您尝试访问的页面,在您的情况下,它本质上意味着它不存在。
用于检查链接是否存在的示例代码a/c
files = []
links = ["https://www.youtube.com/","https://docs.python.org","https://qewrt.org"]
for i in links:
try:
requests.get(i) // If link doesnt exists, it throws an error, else the link is appended to the files list
files.append(i)
except:
print(i+" doesnt exist")
print(files)
在此基础上,根据您的情况,检查所有文件是否以给定格式存在:
import requests
file_prefix = 'https://example.com/assets/contents/1627'
file_lists = []
for i in range(10**6):
suffix = (6-len(str(i)))*"0"+str(i)+".mp4"
file_name = file_prefix+suffix
try:
requests.get(file_name)
file_lists.append(file_name)
except:
continue
for i in file_lists:
print(i)
根据您的所有代码和LMC代码,我做了一件测试所有MP4文件并向我显示“标题”的事情,我如何只能选择具有像链接这样的mp4有效文件的链接
import requests
file_prefix = 'https://example.com/assets/contents/1627'
file_lists = []
for i in range(10**6):
suffix = (6-len(str(i)))*"0"+str(i)+".mp4"
file_name = file_prefix+suffix
try:
requests.get(file_name)
file_lists.append(file_name)
r = requests.get(file_name, stream=True)
print(file_name)
print(r.headers)
except:
continue
for i in file_lists:
print(i)