Сохранение изображения с веб-страницы с помощью запроса - PullRequest
0 голосов
/ 12 апреля 2020

На веб-странице есть изображение, которое я хотел бы сохранить на диске, используя python. Я попытался сделать

r=requests.get(url, timeout=60)
p=os.path.sep.join([args["output"],"{}.jpeg".format(str(total).zfill(5))])
f.write(r.content)
f.close()

Но я понял, что сохраненный файл не в формате изображения, как

$file name_of_file  
00018.jpeg: HTML document, ASCII text, with very long lines, with no line terminators

Затем я попытался:

    r=requests.get(url, timeout=60)
    p=os.path.sep.join([args["output"],"{}.jpeg".format(str(total).zfill(5))])
    f=open(p, "wb")
    i=r.raw
    q=Image.open(BytesIO(r.content))
    print(q.type)
    f.write(i)
    f.close()

Но безуспешно. Что мне делать?

ОБНОВЛЕНИЕ:

r = requests.get(url, timeout=60)
    # save the image to disk
    p = os.path.sep.join([args["output"], "{}.jpeg".format(
    str(total).zfill(5))])

    with open("test.jpeg","wb+") as f:
        f.write(requests.get("name_of_website",headers=headers).content)


    f.close()

Когда я вручную копировал изображение из Интернета с помощью курсора, это был формат jpg.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Эта страница требует повар ie, чтобы сделать это: enter image description here

Если нет, вы не можете посетить его напрямую.

Простой способ добавить повар ie в заголовке вашего запроса:

import requests

headers = {
    "Cookie":"visid_incap_276192=vO9ugmNqRS+XGehZnF1jiwL8kl4AAAAAQUIPAAAAAADc6Z+46+Lp6X9DL0FUaSOv; incap_ses_627_276192=HgPZUq1t1yD2FURXnY2zCAL8kl4AAAAAyQ+1ZeYdSVzPTcurvHnlwA==; JSESSIONID=0001Zh35TV6HDxcVflnHMwIHsqe:-1801K8D; incap_ses_553_276192=XuxOZn9AsVOTcVuFwKasB3P9kl4AAAAAaxsIzIzT5BwV8RqhcTVPsw==",
}

with open("test.jpg","wb+") as f:
    f.write(requests.get("https://www.e-zpassny.com/vector/jcaptcha.do",headers=headers).content)

Теперь он может успешно загрузить изображение: enter image description here

0 голосов
/ 12 апреля 2020

Я думаю, вы должны сделать что-то вроде этого:

r = requests.get(url, timeout=60)
q = Image.open(BytesIO(r.content))
fp = os.path.join([args["output"], f"{str(total).zfill(5)}.jpeg"]) # here i used f-string because it looks more compact 
q = q.save(fp)

Image.save () описал здесь
F-строки это способ форматирования, он описал здесь и здесь

Я надеюсь, что это полезно, хорошего дня!

РЕДАКТИРОВАТЬ: Хорошо, похоже, это не работает Итак, вы можете попробуйте это с здесь :

r = requests.get(url, timeout=60)

bytes = BytesIO(r.content)
bytes.seek(0)
q = Image.ope(bytes)

fp = os.path.join([args["output"], f"{str(total).zfill(5)}.jpeg"]) # here i used f-string because it looks more compact 
q = q.save(fp)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...