def __init__(self, top_function, top_url, <EOL>cache_path, throttle_bounds, headers = {}):
self.top_function = top_function<EOL>self.top_url = top_url<EOL>self.headers = headers<EOL>class DownloaderWithBanProtection(Downloader):<EOL><INDENT>def does_show_ban(self_downloader, crawl_element):<EOL><INDENT>return self.does_show_ban(crawl_element)<EOL><DEDENT><DEDENT>self.downloader = DownloaderWithBanProtection(<EOL>cache_path, throttle_bounds, headers)<EOL>self.visited = set()<EOL>self.not_allowed_hrefs = set()<EOL>self.download_and_parse = memoize.MemoizedFunction(<EOL>self.download_and_parse, <NUM_LIT:100>, record_stats = True)<EOL>
top_function is a function that receives a CrawlElement instance and
returns a dict mapping (function of an identical signature and return
type) to (list of URL instances).  
top_url is a URL instance