Requests
requests — это библиотека, с помощью которой можно делать запросы в интернет. Само слово “requests” переводится как запросы. Вот как сделать запрос на сайт google.com:
import requests url = 'https://google.com' response = requests.get(url) response.raise_for_status()
Функция requests.get() делает запрос к сайту google.com, а в переменной response теперь ответ от сайта. Ответ — это не строка и не число. Это сложный объект, в котором есть много всего. Подробнее об этом можно посмотреть в слайдах.
Строчка response.raise_for_status() нужна для того, чтобы проверить, понял вас сервер или нет. Если сервер вернёт 404 «Ресурс не найден», то в response не будет странички сайта google.com, а будет только “Ошибка 404”. Если не вызвать raise_for_status , программа подумает, что всё в порядке, что вы так и хотели: отправить запрос на страницу, которой нет. Обязательно вызывайте .raise_for_status() после каждого запроса в интернет, иначе вы рискуете потратить кучу времени на поиск ошибки, которую замалчивает библиотека requests .
Всегда вызывайте .raise_for_status()
Вот как получить текст ответа от сервера:
print(response.text)
В ответ вы получите огромный HTML-документ одной строкой. Начинаться будет так:
Именно это получает ваш браузер, когда вы заходите на сайт google.com, и из этого он уже отрисовывает красивую страничку.
Но стоит понимать, что requests может скачивать не только HTML-документы, а буквально всё, что есть в интернете.
Вот как скачать картинку:
import requests url = "https://dvmn.org/filer/canonical/1542890876/16/" response = requests.get(url) response.raise_for_status() filename = 'dvmn.svg' with open(filename, 'wb') as file: file.write(response.content)
То же самое: делаем запрос по ссылке, получаем ответ, потом сохраняем его в файл. Единственное отличие в том, что вместо response.text для картинок используется response.content , потому что картинка — это не текст.
.text — для текста, .content — для картинки
Узнать больше
- Руководство по работе с requests
- Работа с файлами в Python
- Больше о кодах состояния HTTP
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Python. Requests+bs4 часть 2 WebScrapping [8]
В данном примере, мы создадим программу, которая выводит текущий курс доллара.
Скопируйте себе следующий код.
import requests resp = requests.get("https://www.cbr-xml-daily.ru/daily_json.js").json() print(resp['Valute']['USD']['Value'])
Да, это вся программа. Все что она делает, это получает данные о курсах валют в формате json.
resp = requests.get("https://www.cbr-xml-daily.ru/daily_json.js").json()
.json(), преобразует json данные в Python словарь. Из него, мы получили данные о курсе доллара.
print(resp['Valute']['USD']['Value'])
Скачивание картинок.
В этом примере, мы научимся скачивать мемы, с сайта anekdot.ru.
Перепишите данный скрипт:
import requests from bs4 import BeautifulSoup header = < #user-agent ОБЯЗАТЕЛЕН т.к. сайт не доступен без него 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0' >resp = requests.get("https://www.anekdot.ru/release/mem/day/", headers=header).text soup = BeautifulSoup(resp, 'lxml') images = soup.findAll('img') for image in images: try: image_link = image.get('src') image_name = image_link[image_link.rfind('/')+1:] image_bytes = requests.get(image_link, headers=header).content print(image_link) if not image_link: continue with open(f'images/', 'wb') as f: f.write(image_bytes) except: print('error skipped')
header = < #user-agent ОБЯЗАТЕЛЕН т.к. сайт не доступен без него 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0' >resp = requests.get("https://www.anekdot.ru/release/mem/day/", headers=header).text
Здесь мы получили html страницу, передав в качестве заголовка user-agent, передавать его обязательно, т.к. если этого не сделать, вместо html страницы, получим «Access Denied«.
Далее, получаем все картинки (элементы с тегом img).
soup = BeautifulSoup(resp, 'lxml') images = soup.findAll('img')
В теге img, ищем получаем аргумент src (ссылка на картинку).
image_link = image.get('src')
Из ссылки, извлекаем название картинки.
image_name = image_link[image_link.rfind('/')+1:]
И, скачиваем картинку.
image_bytes = requests.get(image_link, headers=header).content
.content, в отличии от .text и .json, представляет данные в формате байт-кода.
Полученную картинку сохраняем в папке images. Предварительно, создайте папку images, в директории скрипта.
with open(f'images/', 'wb') as f: f.write(image_bytes)
На всякий случай, обернул все это в try/except, что-бы программа пропускала ошибки.
Вот и все, программа теперь умеет скачивать картинки. При желании, вы можете её заставить скачивать музыку и видео.
Сохранить картинку по ссылке
Python 3.x хочу сохранить картинку на комп по прямой ссылке на неё.
В гугле нашёл такой скрипт, по сравнению с другими он хотя бы запускается. Как я понял, он читает урл и открывает его. Но ничего не открывается, и мне требуется сохранить фото в какую нибудь папку.
1 2 3 4 5 6
import urllib.request url = "https://урл на картинку.jpg" img = urllib.request.urlopen(url).read() out = open("img.jpg", "wb") out.write(img) out.close
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как сохранить график pyqtgraph в картинку
Добрый день! Как сохранить график pyqtgraph в картинку? Взял пример с их сайта: import pyqtgraph.
Как сохранить картинку в модели, отправив её через ajax?
Я уже 2 дня, завтра третий, буду биться с казалось бы простой задачей: мне нужно тупо через аякс.

Сохранить картинку по прямой ссылке
Здравствуйте. Кароче КАК сохранить картинку по конкретной ссылке?
Необходимо скопировать изображение по ссылке, из сохранить по другой ссылке
Или может быть как изображение из Image, сохранить по ссылке, что бы размеры были ни как в Image, а.
Покозать картинку из бд по её ссылке
Доброго времени суток ест бд id avtor linc—ссылка на картинку data Как покозать картинку.
Smeilz / Скачать картинку с ресурса
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| import requests |
| res =requests.get(«https://docs.python.org/3.5/_static/py.png») |
| with open(«python.png», «wb») as f: |
| f.write(res.content) |
