Как скачать изображение с длинной длиной URL? - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь загрузить изображение из "https://prnt.sc", но URL-адрес изображения слишком длинный, и я также не могу найти этот URL-адрес при печати r.content.

Это мой код для получения HTML:

import requests
import random
import string
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.71'
}


register_data = {"path" : "luk111"}
print (register_data)

with requests.Session() as s:
    url = 'https://prnt.sc/luk111'
    r = s.post(url, json=register_data, headers=headers)
    print(r)
    print (r.content)

Весь URL-адрес содержит около 81954 символов, поэтому мне нужен более удобный способ его загрузки. Есть идеи?

Это мой код для загрузки изображения .jpg:

import random
import urllib.request

def download_web_image(url):
    name = "xddd"
    full_name = "screen/" + str(name) + ".jpg"
    urllib.request.urlretrieve(url,full_name)

xd = input("paste url")

download_web_image(xd)

1 Ответ

1 голос
/ 08 января 2020

Этот длинный URL-адрес на странице является не реальным URL-адресом, а данными изображения в base64

Но сначала я отключил JavaScript в веб-браузере и проверил эту страницу без JavaScript, поскольку requests и BeautifulSoup не может запустить JavaScript.

Я вижу нормальный URL к изображению, и у меня нет проблем с его загрузкой.

import requests
from bs4 import BeautifulSoup as BS

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.71'
}

with requests.Session() as s:
    url = 'https://prnt.sc/luk111'
    r = s.get(url, headers=headers)

    soup = BS(r.content, 'html.parser')
    img_url = soup.find('img', {'id': 'screenshot-image'})['src']

    r = s.get(img_url, headers=headers)
    with open('temp.png', 'wb') as f:
        f.write(r.content)
...