Python, 276 bytes
=

    V='.oO-'
    def F(d):
     D=lambda i:int(d[i])-1
     print"  "+" _  "[D(0)]*3+"\n "+"_. (=./_=._*=.\\__. _"[D(0)::4]+"\n"+\
    " \\  "[D(4)]+"("+V[D(2)]+',._ '[D(1)]+V[D(3)]+")"+" //  "[D(5)]+'\n'+\
    "< / "[D(4)]+"("+" ]> :    [< "[D(6)::4]+")"+"> \\ "[D(5)]+"\n ("+\
    ' "_ : _  "_ '[D(7)::4]+")"

This code is 282 bytes for readability, take away `\ `*3 to get 276 bytes.

Builds the snowman up bit by bit.

# Bonus

`F("44444432")` gives "sleepy russian bear":

    
     (_*_)
     (- -)
     (> <)
     (" ")