Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2022 21:13:39

utyara3
Зарегистрирован: 2021-07-12
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

Привет всем, хочу скачать изображение с сайта, но оно постоянно разное и название соответственно тоже меняется, хочу скачать его через код, но не знаю его названия, помогите
UPD: если его качать, то качать надо с помощью названия, а название разное типо
надеюсь объяснил понятно

Отредактировано utyara3 (Июнь 7, 2022 21:20:41)

Офлайн

#2 Июнь 7, 2022 21:51:30

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

utyara3
Привет всем, хочу скачать изображение с сайта
какое изображение с какого сайта?

Офлайн

#3 Июнь 7, 2022 23:29:31

utyara3
Зарегистрирован: 2021-07-12
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

xam1816
хыхыхы, ну в общем с prnt.sc/ ты вводишь после / комбинацию букв любую и он выдает скриншот абсолютно рандомный скрин рандомного человека, например prnt.sc/ytr13m и программа создает рандом ссылку переходит и скачивает изображение, у меня проблема с переходом на сайт и скачиванием, сколько пытался на scrapy, requests, Beautiful Soup, не мое это, но научится хочется, спасибо заранее за помощь

Офлайн

#4 Июнь 8, 2022 00:02:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

Напиши первую функцию, которая просто генерирует ссылку.
Напиши вторую функцию, которая заходит по известной ссылке и скачивает изображение.
Напиши третью функцию, которая сначала вызывает первую функцию и получает из неё ссылку, а потом вызывает вторую функцию, передаёт в неё полученную ссылку и скачивает изображение.



Офлайн

#5 Июнь 8, 2022 01:58:36

utyara3
Зарегистрирован: 2021-07-12
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

py.user.next
Напиши первую функцию, которая просто генерирует ссылку.Напиши вторую функцию, которая заходит по известной ссылке и скачивает изображение.Напиши третью функцию, которая сначала вызывает первую функцию и получает из неё ссылку, а потом вызывает вторую функцию, передаёт в неё полученную ссылку и скачивает изображение.
молодец!! круто подсказал! я написал что не знаю как скачать изображения если ты не знаешь его имени
???

Офлайн

#6 Июнь 8, 2022 02:05:54

utyara3
Зарегистрирован: 2021-07-12
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

нашел скрипт еле как!

 from bs4 import BeautifulSoup
import urllib.request
import random
import string
url_base = 'https://prnt.sc/'
def get_html():
    global url_last3
    url_last3 = str(''.join(random.choice(string.digits + string.ascii_lowercase) for _ in range(3)))
    req = str(url_base + url_first3 + url_last3)
    html = urllib.request.urlopen(req).read()
    return html
def main():
    count = input('How many pictures I must download? ')
    pic_count = int(count)
    global url_first3
    url_first3 = input('Enter first 3 digits: ')
    print('OK! Now I`ll download ' + count + ' pictures with the "' + url_first3 + '" first digits!')
    opener = urllib.request.build_opener()
    opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
    urllib.request.install_opener(opener)
    for counter in range(pic_count):
        html = get_html()
        soup = BeautifulSoup(html, 'html.parser')
        picture_url = soup.find(id='screenshot-image')['src']
        urllib.request.urlretrieve(picture_url, picture_url[40:])
        count = counter + 1
        print (str(count) + '   [' + str(url_first3) + str(url_last3) + '] - [' + picture_url + '] - DONE!')
if __name__ == '__main__':
    main()

Офлайн

#7 Июнь 8, 2022 06:14:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

utyara3
нашел скрипт еле как!
А тебе не кажется, что он выглядит как-то странновато и что-то как-то немного похож на какое-то говно из папье-маше?

utyara3
  
opener = urllib.request.build_opener()
Давно я не видел этот метод, уже лет десять. Примерно тогда или даже раньше он нужен был, чтобы понять, как бы питоном страницу скачать. Тогда эти средства в питоне были слабо развиты и проводилось много экспериментов всяких.

utyara3
молодец!! круто подсказал!
Так это не для тебя; это для того, кто тебе будет писать нормальный вариант. Сам-то ты не сможешь написать.

utyara3
я написал что не знаю как скачать изображения
Скачать не сложно, сложно будет делать всё остальное - то, что делается до скачивания и после скачивания.

А сейчас ты в чайную кружку с чаем и сахаром налил бульон из борща и капусту положил оттуда же. Это, конечно, можно всё съесть и выпить, но это не чаепитие совсем, даже если тортик рядом поставить. Примерно вот это напоминает этот “твой” скрипт.



Отредактировано py.user.next (Июнь 8, 2022 06:17:13)

Офлайн

#8 Июнь 9, 2022 01:54:37

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1394
Репутация: +  124  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

utyara3
нашел скрипт еле как!
просто написал
 import re
import requests
import random
from string import ascii_lowercase, digits
from bs4 import BeautifulSoup
import os
#
ROOT_URL = r'https://prnt.sc/'
MY_HEADERS = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64)"
                            " AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.141"
                            " YaBrowser/22.3.3.889 Yowser/2.5 Safari/537.36",
              }
MY_PATH = '/home/xam/Загрузки/test_folder'
#
def get_random_char_set():
    out = ''
    for _ in range(random.randint(6, 7)):
        out += random.choice(ascii_lowercase+digits)
    return out
#
def get_html(url):
    resp = requests.get(url, headers=MY_HEADERS)
    if resp.ok:
        return resp.content
    else:
        print(resp.status_code)
#
def get_img_src_from_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    search_img = soup.find(id='screenshot-image', src=re.compile(r'https'))
    if search_img:
        return search_img['src']
#
def download_img(path, img_src):
    resp = requests.get(img_src, headers=MY_HEADERS)
    if resp.status_code == 200:
        if resp.headers['content-type'] in ['image/png', 'image/jpeg']:
            with open(os.path.join(path,img_src.rsplit('/', 1)[1]), 'wb') as f:
                f.write(resp.content)
        else:
            print(resp.headers['content-type'])
    else:
        print(f'{img_src} status code:{resp.status_code}')
#
#
def download_several_img(count):
    i = 0
    while i < count:
        char_set = get_random_char_set()
        html = get_html(ROOT_URL+char_set)
        img_src = get_img_src_from_html(html)
        if img_src:
            print(char_set)
            download_img(MY_PATH, img_src)
            i += 1
        else:
            print('*')
#
if __name__ == '__main__':
    download_several_img(3) # загрузит 3 картинки

Офлайн

#9 Июнь 9, 2022 02:16:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

xam1816
просто написал
Убери print'ы отовсюду. Функции должны делать только return. Когда нужно выводить что-то на экран, это должны делать отдельные выводящие функции, которым что-то там подаётся через аргументы, чтобы они могли сообразить, что выводить. Связано это с тем, что сегодня тебе надо выводить на экран, а завтра этот вывод на экран надо будет разом отключить во всей программе. Обычно это всё прикрепляется к одной маленькой опции в конфигурационном файле программы, где ты, например, поставил “print off” - и по всей программе вывод отключился, где ты написал “log on” - и по всей программе вывод в лог-файл пошёл. Так вот, когда у тебя внутри рабочих функций это всё замешано, ты не сможешь быстро включать и отключать вывод, перенаправлять его, да и просто менять формат вывода, что тоже часто бывает нужно. Часто нужно делать вывод более подробный или менее подробный, добавлять в него какие-то данные или, наоборот, скрывать в нём какие-то данные, чтобы экран не забивать. Всё это регулируется опциями, подаваемыми в программу (через командную строку и/или через файл настроек).

Поэтому рабочие функции должны только работать. Выводящие функции должны только выводить. Связывает их между собой связывающая функция. У каждой функции только её дело. Функция не должна делать сто вещей одновременно. Функция не должна быть Дедом Морозом, который сам танцует, сам поёт, сам подарки раздаёт.


tags: pure function



Отредактировано py.user.next (Июнь 9, 2022 02:17:40)

Офлайн

#10 Июнь 9, 2022 16:31:10

utyara3
Зарегистрирован: 2021-07-12
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Скачать изображение с сайта, не зная название файла

py.user.next
Ого, прости, я не думал что кто то код писать будет, я думал мне просто скажут что использовать, спасибо, что объяснил!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version