Python -> Получить все действительные URL-адреса загрузки мультимедиа из веб-папки

avatar
RickeDz
8 августа 2021 в 17:33
112
3
-1

У меня есть веб-сайт с такой структурой ссылок

https://example.com/assets/contents/1627347928.mp4
https://example.com/assets/contents/1627342345.mp4
https://example.com/assets/contents/1627215324.mp4

И я хочу использовать python, чтобы получить все ссылки для загрузки, когда я получаю доступ к папке /assets/contents/, я получаю ошибку 404, поэтому я не вижу все медиафайлы для загрузки из этой веб-папки, но я знать, что все файлы MP4 имеют 10 символов, и все они начинаются с «1627 *****.mp4» Могу ли я сделать LOOP, чтобы проверить все ссылки с этого веб-сайта и получить все ДЕЙСТВИТЕЛЬНЫЕ ссылки? Спасибо!!!!!!!!!!!! Сейчас я новичок в Python!

Я мог бы проверить, есть ли медиафайлы mp4/media с этим кодом, я могу видеть заголовки файла, но как сделать цикл для проверки всех ссылок и автоматической загрузки? Или просто показать мне действительные ссылки? Спасибо!!

import requests
link = 'https://example.com/assets/contents/1627347923.mp4'
r = requests.get(link, stream=True)
print(r.headers)
Источник
LMC
8 августа 2021 в 17:36
0

Откуда вы берете ссылки? HTML-страница? Опубликуйте конкретную информацию об этом, пожалуйста.

RickeDz
8 августа 2021 в 17:38
0

У меня здесь нет всех ссылок, и я не могу размещать здесь НАСТОЯЩИЕ ссылки, потому что это частный контент, но структура ссылок — это example.com/assets/contents/1627******.mp4, я хочу сделать цикл на этих 6 символах от 000000 до 999999 и получить все медиа! Теперь понимаю?

LMC
8 августа 2021 в 17:43
0

names = [ 1627347923, 1627347924, 1627347925] составить список, повторить его и построить ссылки как 'https://example.com/assets/contents/{}.mp4'.format(item)

Ответы (3)

avatar
RickeDz
8 августа 2021 в 18:43
0

Основываясь на всех ваших кодах и кодах 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)
avatar
LMC
8 августа 2021 в 18:01
0

Печать, если файл существует или нет

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)
RickeDz
8 августа 2021 в 18:12
0

Хорошо, и если я хочу заполнить массив от 0000000000 до 9999999999, что мне делать?

LMC
8 августа 2021 в 18:17
0

упс, это 1 миллиард чисел. Не уверен, что вы можете или хотите это сделать. Это будет означать 1 миллиард запросов на этот сайт.

RickeDz
8 августа 2021 в 18:19
0

извините, только 1626000000 до 1627999999

LMC
8 августа 2021 в 18:21
0

У вас есть числа, погуглите, как составить список из этой последовательности. С 11 июля по 3 августа, кстати.

avatar
Shashanka Das
8 августа 2021 в 17:51
0

да, вы можете запустить цикл, проверить код состояния или если request.get() выдаст ошибку, вы вернетесь и получите все файлы, но есть некоторые проблемы, которые могут помешать вам выбрать это

  1. Ваши файлы имеют формат "1627******.mp4", что означает, что цикл for будет проверять наличие 10^6 записей, если все * являются числами, что неэффективно. Если вы планируете включать символы и специальные символы, это будет крайне неэффективно.

  2. Что делать, если в будущем у вас будет более 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)
RickeDz
8 августа 2021 в 17:59
0

Шашанка, все ссылки имеют 10-символьный формат и все цифры, а не буквы или специальные символы, я просто хочу, чтобы все действительные ссылки были напечатаны в файле cmd или txt...

Shashanka Das
8 августа 2021 в 18:04
0

Я понимаю, я говорю, что если в будущем у вас будет больше файлов.

Shashanka Das
8 августа 2021 в 18:14
0

Я добавил пример кода, чтобы получить желаемые результаты, но будьте осторожны, это займет время из-за того же объяснения, которое я дал ранее.