Предисловие
В этом уроке мы научимся:
- работать с JSON
- Скачивать файлы
Работаем с JSON.
В данном примере, мы создадим программу, которая выводит текущий курс доллара.
Скопируйте себе следующий код.
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/{image_name}', '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/{image_name}', 'wb') as f:
f.write(image_bytes)
На всякий случай, обернул все это в try/except, что-бы программа пропускала ошибки.
Вот и все, программа теперь умеет скачивать картинки. При желании, вы можете её заставить скачивать музыку и видео.
