Задание. Скрэппер для Flickr
Собрать изображения заданной тематики с сайта flickr.com.
Исходные данные
Flickr — это хранилище изображений. На этом сайте можно искать изображения по ключевым словам. Адрес страницы поиска вот такой:
https://www.flickr.com/search/?text=что-искать
Например, найдём фотографии кошек:
https://www.flickr.com/search/?text=cats
Пробелы в поисковом запросе следует заменять на символ +:
https://www.flickr.com/search/?text=fat+cats
На странице результатов поиска показываются первые несколько фотографий. Каждая такая фотография заключена в тег <div>, который можно отличить по наличию класса "photo-list-photo-view". При этом flickr использует хитрость: фотография задана как фоновое изображение элемента <div>, а не с помощью тега <img>. Однако это нам не должно помешать: ссылку на файл фотографии можно извлечь из значения атрибута style, который выглядит как-то так:
<div class="... photo-list-photo-view ..." ... style="transform: translate(0px, 0px);
-webkit-transform: translate(0px, 0px); -ms-transform: translate(0px, 0px);
width: 244px; height: 180px;
background-image: url(//c6.staticflickr.com/4/3677/13545844805_170ec3746b_n.jpg)">
Извлечь вот эту ссылку на изображение: //c6.staticflickr.com/4/3677/13545844805_170ec3746b_n.jpg не составит труда (можно воспользоваться методом find(), либо творчески использовать метод split(), а можно и регулярным выражением). Ссылка находится в атрибуте style в свойстве background-image после ключевого слова url в круглых скобках.
С помощью библиотеки requests можно получить файл изображения по этой ссылке, а затем сохранить файл на диск средствами Python.
Задача
С помощью библиотек requests и Beautiful Soup найти на сайте flickr набор изображений по некоторому поисковому запросу. Сохранить файлы этих изображений в текущий каталог. Поисковый запрос должен быть задан в начале программы в виде константы. Например, так:
QUERY="fat+cat"
Как вариант, можно запрашивать у пользователя запрос с помощью input(), но тогда не забудьте заменить во введённой строке пробелы на символ +.
Замечания
- Не забудьте добавить протокол
"https:"к ссылке на изображение перед тем, как запрашивать его с помощью requests:https://c6.staticflickr.com/4/3677/13545844805_170ec3746b_n.jpg - Чтобы скачать изображение, нужно создать новый запрос при помощи библиотеки requests и просто сохранить полученный ответ как двоичный файл (используя функции
openиwrite). Содержимое файла в двоичном виде можно найти в response-объекте в атрибутеcontent. - Сохранять файлы можно с произвольными именами (
result1.jpg,result2.jpgи т.п.), но расширение файла должно быть таким же, как в ссылке на файл. То есть если ссылка на файл заканчивалась на.jpg, то и имя выходного файла должно заканчиваться на.jpg. Расширение файла теоретически может быть любым:.jpg,.png,.gifи т.д. - Изображения — двоичные файлы, поэтому файл, в который мы будем сохранять изображение, нужно открывать в режиме
"wb"(двоичный файл на запись):f = open(name, mode="wb").