Домашнее задание. Скрэппер для flickr
20 октября 2018
Собрать изображения заданной тематики с сайта 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()
, а можно и регулярным выражением).
С помощью библиотеки requests можно получить файл изображения по этой ссылке, а затем сохранить файл на диск средствами Python.
Задача
С помощью библиотек requests и Beautiful Soup найти на сайте flickr набор изображений по некоторому поисковому запросу. Сохранить файлы этих изображений в текущий каталог. Поисковый запрос должен быть задан в начале программы в виде константы. Например, так:
QUERY="fat+cat"
Замечания
- Не забудьте добавить протокол
"https:"
к ссылке на изображение перед тем, как запрашивать его с помощью requests:https://c6.staticflickr.com/4/3677/13545844805_170ec3746b_n.jpg
- Чтобы скачать изображение, нужно создать новый запрос при помощи библиотеки requests и просто сохранить полученный ответ как двоичный файл (используя функции
open
иwrite
). - Сохранять файлы можно с произвольными именами (
result1.jpg
,result2.jpg
и т.п.), но расширение файла должно быть таким же, как в ссылке на файл. То есть если ссылка на файл заканчивалась на.jpg
, то и имя выходного файла должно заканчиваться на.jpg
. Расширение файла теоретически может быть любым:.jpg
,.png
,.gif
и т.д. - Изображения — двоичные файлы, поэтому файл, в который мы будем сохранять изображение, нужно открывать в режиме
"wb"
(двоичный файл на запись):f = open(name, mode="wb")
.