<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find(self, limit=None, reverse=False, sort=None, exclude=None, duplicates=True, pretty=False, **filters):
 """ Using filters and sorts, this finds all hyperlinks on a web page :param limit: Crop results down to limit specified :param reverse: Reverse the list of links, useful for before limiting :param exclude: Remove links from list :param duplicates: Determines if identical URLs should be displayed :param pretty: Quick and pretty formatting using pprint :param filters: All the links to search for """

        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