Python. Requests+bs4 часть 2 WebScrapping [8]

Предисловие

В этом уроке мы научимся:

  • работать с 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, что-бы программа пропускала ошибки.

Вот и все, программа теперь умеет скачивать картинки. При желании, вы можете её заставить скачивать музыку и видео.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!