Fragrance analysis

Author: @katychuang

Description: I want to learn more about what's out there in the fragrance world so am starting this project to collect data. There's no existing API to a database of fragrance information so I'm scraping websites as a way to collect some data for analysis.

Scrapy example

Code in this notebook is an example of using scrapy to scrape data off one webpage of Fragrantica. The code below is for Python3, Scrapy (1.4.0).


Making requests

Using the requests library, which returns binary data and the scrapy TextResponse module to read the binary data.

Thanks to @jasonwirth's tip about using user agent strings, I was able to get around the 403 forbidden access error codes while scraping. There are many user agents available to use, the top ones are listed here, and it's conventionally good to rotate/randomize the use of the strings.


In [1]:
import requests
from scrapy.http import TextResponse

url = "https://www.fragrantica.com/designers/Dolce%26Gabbana.html"
user_agent = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/58: .0.3029.110 Chrome/58.0.3029.110 Safari/537.36'}

r = requests.get(url, headers=user_agent)
response = TextResponse(r.url, body=r.text, encoding='utf-8')

Once we have the response, which is a huge chunk of minimized html tags, we need to navigate through the DOM structure to get exactly the information needed. The perfumes are thankfully listed in the tree with the ID #col1, so I can start there as the root and get all the perfume names by picking specific child DOM nodes.


In [2]:
# Navigate the perfume list
c = response.xpath('//div[@id="col1"]/div[@class="perfumeslist"]/div/div/p/a//text()').extract()
print("There are {} perfumes from Dolce & Gabanna".format(len(c)))
print(c)


There are 66 perfumes from Dolce & Gabanna
[' Sicily', ' By', ' By', ' D&G', ' D&G', ' Dolce&Gabbana Perfume for Babies', ' Dolce&Gabbana Pour Femme', ' Dolce&Gabbana Pour Femme Intense', ' Dolce&Gabbana Pour Homme', ' Dolce&Gabbana Pour Homme Intenso ', ' D&G Feminine', ' D&G Masculine', " D&G Anthology L'Empereur 4", ' D&G Anthology La Force 11', ' D&G Anthology La Lune 18', ' D&G Anthology La Roue de La Fortune 10', ' D&G Anthology La Temperance 14', ' D&G Anthology Le Bateleur 1', ' D&G Anthology Le Fou 21', ' D&G Anthology L`Amoureux 6', ' D&G Anthology L`Imperatrice 3', ' Dolce', ' Dolce Floral Drops', ' Dolce Rosa Excelsa', ' D&G Light Blue', ' Light Blue Discover Vulcano Pour Homme', ' Light Blue Dreaming in Portofino', ' Light Blue Eau Intense', ' Light Blue Eau Intense Pour Homme', ' Light Blue Escape to Panarea', ' Light Blue Living Stromboli', ' Light Blue Love in Capri', ' Light Blue pour Homme', ' Light Blue Pour Homme Beauty of Capri ', ' Light Blue Sunset in Salina', ' Light Blue Swimming in Lipari', ' L`eau The One', ' Rose The One', ' The One', ' The One Collector For Men', ' The One Collector For Women', ' The One Desire', ' The One Essence', ' The One for Men', ' The One for Men Eau de Parfum', ' The One for Men Platinum Limited Edition', ' The One Gentleman', ' The One Gold Limited Edition', ' The One Lace Edition', ' The One Royal Night', ' The One Sport', ' Velvet Bergamot', ' Velvet Cypress', ' Velvet Desert Oud', ' Velvet Desire', ' Velvet Exotic Leather', ' Velvet Ginestra', ' Velvet Love', ' Velvet Mimosa Bloom', ' Velvet Patchouli', ' Velvet Pure', ' Velvet Rose', ' Velvet Sublime', ' Velvet Tender Oud', ' Velvet Vetiver', ' Velvet Wood']

The extract() method returns a list, so it was easy to get the number of items by finding the length of the list.


Parsing the response

Once you have the response, you can parse the output to get all the bits of information needed. I'm interested in the name of the perfume, the gender it's made for, the image, and also the url to the product detail page. The function parse_perfume_data() takes the response and outputs the fields to a list of dictionaries.


In [3]:
def parse_perfume_data(response):
    my_list = []
    for row in response.xpath('//div[@id="col1"]/div[@class="perfumeslist"]'):
      perfume = {}
      perfume['name'] = row.xpath('div/div/p/a//text()').extract()[0]
      perfume['year'] = year(row.xpath('div/div/p/span[@class="mtext"]/span/strong/text()').extract())
      perfume['gender'] = row.xpath('div/@class').extract()[0].split(' ')[1][6:]
      perfume['img'] = row.xpath('div/div/p/a/img//@src').extract()[0]
      perfume['url'] = row.xpath('div/div/p/a/@href').extract()[0]
      my_list.append(perfume)
    return my_list

def year(y):
    if len(y) >= 1:
        return y[0]
    else:
        return ''

Now we call this function while passing in the response to get the data, which is a structured extraction from the response. I chose some easy to remember field names to use as dictionary keys.


In [4]:
data = parse_perfume_data(response)

Here's how the data looks like after parsing.


In [5]:
print(data[0])
print(data[1])


{'name': ' Sicily', 'year': '', 'gender': 'female', 'img': 'https://fimgs.net/images/perfume/m.486.jpg', 'url': '/perfume/Dolce-Gabbana/Sicily-486.html'}
{'name': ' By', 'year': '1999', 'gender': 'female', 'img': 'https://fimgs.net/images/perfume/m.489.jpg', 'url': '/perfume/Dolce-Gabbana/By-489.html'}

Data Analysis

Now we can do some quick stats, for example to see how many products per gender


In [6]:
from collections import Counter
Counter(token['gender'] for token in data)


Out[6]:
Counter({'female': 33, 'male': 24, 'unisex': 9})

In [7]:
Counter(token['year'] for token in data)


Out[7]:
Counter({'': 1,
         '1992': 1,
         '1994': 1,
         '1997': 1,
         '1999': 3,
         '2001': 1,
         '2006': 1,
         '2007': 1,
         '2008': 2,
         '2009': 7,
         '2010': 1,
         '2011': 9,
         '2012': 6,
         '2013': 7,
         '2014': 8,
         '2015': 8,
         '2016': 5,
         '2017': 3})

In [8]:
years = list(sorted(set([p['year'] for p in data[1:]])))
yTotal = Counter(token['year'] for token in data)

print('Year', 'M', 'F', 'U', 'T')
for y in years:
    filtered = list(filter(lambda d: d['year'] == y, data))
    count = Counter(token['gender'] for token in filtered)
    print(y, count['male'], count['female'], count['unisex'], yTotal[y])


Year M F U T
1992 0 1 0 1
1994 1 0 0 1
1997 1 0 0 1
1999 1 2 0 3
2001 0 1 0 1
2006 0 1 0 1
2007 1 0 0 1
2008 1 1 0 2
2009 3 4 0 7
2010 1 0 0 1
2011 1 4 4 9
2012 4 2 0 6
2013 1 3 3 7
2014 4 4 0 8
2015 3 4 1 8
2016 1 4 0 5
2017 1 1 1 3

Values where,

  • M = Male
  • F = Female
  • U = Unisex
  • T = Total









 intentional blank space

Appendix


In [9]:
data


Out[9]:
[{'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.486.jpg',
  'name': ' Sicily',
  'url': '/perfume/Dolce-Gabbana/Sicily-486.html',
  'year': ''},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.489.jpg',
  'name': ' By',
  'url': '/perfume/Dolce-Gabbana/By-489.html',
  'year': '1999'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.490.jpg',
  'name': ' By',
  'url': '/perfume/Dolce-Gabbana/By-490.html',
  'year': '1997'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.483.jpg',
  'name': ' D&G',
  'url': '/perfume/Dolce-Gabbana/D-G-483.html',
  'year': '1994'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.484.jpg',
  'name': ' D&G',
  'url': '/perfume/Dolce-Gabbana/D-G-484.html',
  'year': '1992'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.23597.jpg',
  'name': ' Dolce&Gabbana Perfume for Babies',
  'url': '/perfume/Dolce-Gabbana/Dolce-Gabbana-Perfume-for-Babies-23597.html',
  'year': '2013'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.15335.jpg',
  'name': ' Dolce&Gabbana Pour Femme',
  'url': '/perfume/Dolce-Gabbana/Dolce-Gabbana-Pour-Femme-15335.html',
  'year': '2012'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.18837.jpg',
  'name': ' Dolce&Gabbana Pour Femme Intense',
  'url': '/perfume/Dolce-Gabbana/Dolce-Gabbana-Pour-Femme-Intense-18837.html',
  'year': '2013'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.15336.jpg',
  'name': ' Dolce&Gabbana Pour Homme',
  'url': '/perfume/Dolce-Gabbana/Dolce-Gabbana-Pour-Homme-15336.html',
  'year': '2012'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.28935.jpg',
  'name': ' Dolce&Gabbana Pour Homme Intenso ',
  'url': '/perfume/Dolce-Gabbana/Dolce-Gabbana-Pour-Homme-Intenso-28935.html',
  'year': '2014'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.487.jpg',
  'name': ' D&G Feminine',
  'url': '/perfume/Dolce-Gabbana/D-G-Feminine-487.html',
  'year': '1999'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.488.jpg',
  'name': ' D&G Masculine',
  'url': '/perfume/Dolce-Gabbana/D-G-Masculine-488.html',
  'year': '1999'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.14407.jpg',
  'name': " D&G Anthology L'Empereur 4",
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-L-Empereur-4-14407.html',
  'year': '2012'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.6842.jpg',
  'name': ' D&G Anthology La Force 11',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-La-Force-11-6842.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.6089.jpg',
  'name': ' D&G Anthology La Lune 18',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-La-Lune-18-6089.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.6088.jpg',
  'name': ' D&G Anthology La Roue de La Fortune 10',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-La-Roue-de-La-Fortune-10-6088.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.12483.jpg',
  'name': ' D&G Anthology La Temperance 14',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-La-Temperance-14-12483.html',
  'year': '2011'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.6085.jpg',
  'name': ' D&G Anthology Le Bateleur 1',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-Le-Bateleur-1-6085.html',
  'year': '2009'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.12484.jpg',
  'name': ' D&G Anthology Le Fou 21',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-Le-Fou-21-12484.html',
  'year': '2011'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.6087.jpg',
  'name': ' D&G Anthology L`Amoureux 6',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-L-Amoureux-6-6087.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.6086.jpg',
  'name': ' D&G Anthology L`Imperatrice 3',
  'url': '/perfume/Dolce-Gabbana/D-G-Anthology-L-Imperatrice-3-6086.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.22955.jpg',
  'name': ' Dolce',
  'url': '/perfume/Dolce-Gabbana/Dolce-22955.html',
  'year': '2014'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.29524.jpg',
  'name': ' Dolce Floral Drops',
  'url': '/perfume/Dolce-Gabbana/Dolce-Floral-Drops-29524.html',
  'year': '2015'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.32612.jpg',
  'name': ' Dolce Rosa Excelsa',
  'url': '/perfume/Dolce-Gabbana/Dolce-Rosa-Excelsa-32612.html',
  'year': '2016'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.485.jpg',
  'name': ' D&G Light Blue',
  'url': '/perfume/Dolce-Gabbana/D-G-Light-Blue-485.html',
  'year': '2001'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.23619.jpg',
  'name': ' Light Blue Discover Vulcano Pour Homme',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Discover-Vulcano-Pour-Homme-23619.html',
  'year': '2014'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.14799.jpg',
  'name': ' Light Blue Dreaming in Portofino',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Dreaming-in-Portofino-14799.html',
  'year': '2012'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.44034.jpg',
  'name': ' Light Blue Eau Intense',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Eau-Intense-44034.html',
  'year': '2017'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.44035.jpg',
  'name': ' Light Blue Eau Intense Pour Homme',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Eau-Intense-Pour-Homme-44035.html',
  'year': '2017'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.23620.jpg',
  'name': ' Light Blue Escape to Panarea',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Escape-to-Panarea-23620.html',
  'year': '2014'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.14800.jpg',
  'name': ' Light Blue Living Stromboli',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Living-Stromboli-14800.html',
  'year': '2012'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.36601.jpg',
  'name': ' Light Blue Love in Capri',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Love-in-Capri-36601.html',
  'year': '2016'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.1068.jpg',
  'name': ' Light Blue pour Homme',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-pour-Homme-1068.html',
  'year': '2007'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.36602.jpg',
  'name': ' Light Blue Pour Homme Beauty of Capri ',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Pour-Homme-Beauty-of-Capri-36602.html',
  'year': '2016'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.29959.jpg',
  'name': ' Light Blue Sunset in Salina',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Sunset-in-Salina-29959.html',
  'year': '2015'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.29960.jpg',
  'name': ' Light Blue Swimming in Lipari',
  'url': '/perfume/Dolce-Gabbana/Light-Blue-Swimming-in-Lipari-29960.html',
  'year': '2015'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.4494.jpg',
  'name': ' L`eau The One',
  'url': '/perfume/Dolce-Gabbana/L-eau-The-One-4494.html',
  'year': '2008'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.6461.jpg',
  'name': ' Rose The One',
  'url': '/perfume/Dolce-Gabbana/Rose-The-One-6461.html',
  'year': '2009'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.698.jpg',
  'name': ' The One',
  'url': '/perfume/Dolce-Gabbana/The-One-698.html',
  'year': '2006'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.27419.jpg',
  'name': ' The One Collector For Men',
  'url': '/perfume/Dolce-Gabbana/The-One-Collector-For-Men-27419.html',
  'year': '2014'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.27418.jpg',
  'name': ' The One Collector For Women',
  'url': '/perfume/Dolce-Gabbana/The-One-Collector-For-Women-27418.html',
  'year': '2014'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.17124.jpg',
  'name': ' The One Desire',
  'url': '/perfume/Dolce-Gabbana/The-One-Desire-17124.html',
  'year': '2013'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.31968.jpg',
  'name': ' The One Essence',
  'url': '/perfume/Dolce-Gabbana/The-One-Essence-31968.html',
  'year': '2015'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.2056.jpg',
  'name': ' The One for Men',
  'url': '/perfume/Dolce-Gabbana/The-One-for-Men-2056.html',
  'year': '2008'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.31909.jpg',
  'name': ' The One for Men Eau de Parfum',
  'url': '/perfume/Dolce-Gabbana/The-One-for-Men-Eau-de-Parfum-31909.html',
  'year': '2015'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.22108.jpg',
  'name': ' The One for Men Platinum Limited Edition',
  'url': '/perfume/Dolce-Gabbana/The-One-for-Men-Platinum-Limited-Edition-22108.html',
  'year': '2013'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.8907.jpg',
  'name': ' The One Gentleman',
  'url': '/perfume/Dolce-Gabbana/The-One-Gentleman-8907.html',
  'year': '2010'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.22107.jpg',
  'name': ' The One Gold Limited Edition',
  'url': '/perfume/Dolce-Gabbana/The-One-Gold-Limited-Edition-22107.html',
  'year': '2013'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.13498.jpg',
  'name': ' The One Lace Edition',
  'url': '/perfume/Dolce-Gabbana/The-One-Lace-Edition-13498.html',
  'year': '2011'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.33180.jpg',
  'name': ' The One Royal Night',
  'url': '/perfume/Dolce-Gabbana/The-One-Royal-Night-33180.html',
  'year': '2015'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.14225.jpg',
  'name': ' The One Sport',
  'url': '/perfume/Dolce-Gabbana/The-One-Sport-14225.html',
  'year': '2012'},
 {'gender': 'male',
  'img': 'https://fimgs.net/images/perfume/m.25154.jpg',
  'name': ' Velvet Bergamot',
  'url': '/perfume/Dolce-Gabbana/Velvet-Bergamot-25154.html',
  'year': '2014'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.42825.jpg',
  'name': ' Velvet Cypress',
  'url': '/perfume/Dolce-Gabbana/Velvet-Cypress-42825.html',
  'year': '2017'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.18165.jpg',
  'name': ' Velvet Desert Oud',
  'url': '/perfume/Dolce-Gabbana/Velvet-Desert-Oud-18165.html',
  'year': '2013'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.13746.jpg',
  'name': ' Velvet Desire',
  'url': '/perfume/Dolce-Gabbana/Velvet-Desire-13746.html',
  'year': '2011'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.31355.jpg',
  'name': ' Velvet Exotic Leather',
  'url': '/perfume/Dolce-Gabbana/Velvet-Exotic-Leather-31355.html',
  'year': '2015'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.36811.jpg',
  'name': ' Velvet Ginestra',
  'url': '/perfume/Dolce-Gabbana/Velvet-Ginestra-36811.html',
  'year': '2016'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.13747.jpg',
  'name': ' Velvet Love',
  'url': '/perfume/Dolce-Gabbana/Velvet-Love-13747.html',
  'year': '2011'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.31356.jpg',
  'name': ' Velvet Mimosa Bloom',
  'url': '/perfume/Dolce-Gabbana/Velvet-Mimosa-Bloom-31356.html',
  'year': '2015'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.13744.jpg',
  'name': ' Velvet Patchouli',
  'url': '/perfume/Dolce-Gabbana/Velvet-Patchouli-13744.html',
  'year': '2011'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.39623.jpg',
  'name': ' Velvet Pure',
  'url': '/perfume/Dolce-Gabbana/Velvet-Pure-39623.html',
  'year': '2016'},
 {'gender': 'female',
  'img': 'https://fimgs.net/images/perfume/m.25153.jpg',
  'name': ' Velvet Rose',
  'url': '/perfume/Dolce-Gabbana/Velvet-Rose-25153.html',
  'year': '2014'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.13748.jpg',
  'name': ' Velvet Sublime',
  'url': '/perfume/Dolce-Gabbana/Velvet-Sublime-13748.html',
  'year': '2011'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.18164.jpg',
  'name': ' Velvet Tender Oud',
  'url': '/perfume/Dolce-Gabbana/Velvet-Tender-Oud-18164.html',
  'year': '2013'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.13745.jpg',
  'name': ' Velvet Vetiver',
  'url': '/perfume/Dolce-Gabbana/Velvet-Vetiver-13745.html',
  'year': '2011'},
 {'gender': 'unisex',
  'img': 'https://fimgs.net/images/perfume/m.13743.jpg',
  'name': ' Velvet Wood',
  'url': '/perfume/Dolce-Gabbana/Velvet-Wood-13743.html',
  'year': '2011'}]

In [16]:
# display D&G Perfume Bottles
from IPython.display import Image, HTML, display
from glob import glob

def make_html(image):
     return '<img src="{}" style="display:inline;margin:1px"/>'.format(image)

item = ''.join( [make_html(x['img']) for x in data] )
display(HTML(item))



This notebook was created by Dr. Kat for macbookandheels.com (link).

Please give credit if any of the contents are re-used.

For any questions, comments, and suggests please contact via twitter @katychuang or github @katychuang.