Stack - Implemented as Singly Linked List
Your stack_search function re-implements loop over your linked-list. Instead of that you can use your __iter__ itself to keep in DRY. Plus it should True or False instead of 1 and 0.

The Pythonic way will be implement __contains__ to check if your container type contains an item. Then you could simply do 'a' in my_stack.

def __contains__(self, value):
    return value in (node.data for node in self)

Instead of length method implement __len__. This will work with Python's built-in len().

Plus after defining this you won't need the method is_empty either as __len__ can be used to check for falsyness: if my_stack: .... You could also define __bool__ based on self.head for checking falsiness instead of using __len__, but it would be redundant in my opinion.
pop() should raise an exception when the stack is empty, for example list.pop, dict.pop, deque.pop all raise some error for it.
Stack().peek() currently raises an AttributeError. Instead of that you should be raising some custom exception when the stack is empty.