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

#python #file #web-scraping #python-requests #download

Вопрос:

У меня здесь есть сайт, на котором есть такая структура ссылок

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


 

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

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

 import requests
link = 'https://example.com/assets/contents/1627347923.mp4'
r = requests.get(link, stream=True)
print(r.headers)
 

Комментарии:

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

2. У меня здесь нет всех ссылок, и я не могу размещать здесь РЕАЛЬНЫЕ ссылки, потому что это частный контент, но структура ссылок его example.com/assets/contents/1627******.mp4, я хочу сделать цикл из 6 символов с 000000 по 999999 и получить все носители! Теперь понимаешь?

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

Ответ №1:

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

 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)
 

Комментарии:

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

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

3. извините, только с 1626000000 по 1627999999

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

Ответ №2:

да, вы можете запустить цикл, проверить код состояния или, если requests.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)
 

Комментарии:

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

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

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

Ответ №3:

Основываясь на всех ваших кодах и кодах 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)