def find(self, limit=None, reverse=False, sort=None,
             exclude=None, duplicates=True, pretty=False, **filters):
        if exclude is None:
            exclude = []
        if 'href' not in filters:
            filters['href'] = True
        search = self._soup.findAll('a', **filters)
        if reverse:
            search.reverse()
        links = []
        for anchor in search:
            build_link = anchor.attrs
            try:
                build_link[u'seo'] = seoify_hyperlink(anchor['href'])
            except KeyError:
                pass
            try:
                build_link[u'text'] = anchor.string or build_link['seo']
            except KeyError:
                pass
            ignore_link = False
            for nixd in exclude:
                for key, value in six.iteritems(nixd):
                    if key in build_link:
                        if (isinstance(build_link[key], collections.Iterable)
                                and not isinstance(build_link[key], six.string_types)):
                           for item in build_link[key]:
                                ignore_link = exclude_match(value, item)
                        else:
                            ignore_link = exclude_match(value, build_link[key])
            if not duplicates:
                for link in links:
                    if link['href'] == anchor['href']:
                        ignore_link = True
            if not ignore_link:
                links.append(build_link)
            if limit is not None and len(links) == limit:
                break
        if sort is not None:
            links = sorted(links, key=sort, reverse=reverse)
        if pretty:
            pp = pprint.PrettyPrinter(indent=4)
            return pp.pprint(links)
        else:
            return links