'Get the sitemap.xml file and parse it.
:param fuzzable_request: A fuzzable_request instance that contains
(among other things) the URL to test.'

@runonce(exc_class=RunOnce)
def crawl(self, fuzzable_request):

    base_url = fuzzable_request.get_url().base_url()
    sitemap_url = base_url.url_join('sitemap.xml')
    response = self._uri_opener.GET(sitemap_url, cache=True)
    if (('</urlset>' in response) and (not is_404(response))):
        fr = FuzzableRequest.from_http_response(response)
        self.output_queue.put(fr)
        om.out.debug('Parsing    xml    file    with    xml.dom.minidom.')
        try:
            dom = xml.dom.minidom.parseString(response.get_body())
        except:
            raise BaseFrameworkException('Error    while    parsing    sitemap.xml')
        else:
            raw_url_list = dom.getElementsByTagName('loc')
            parsed_url_list = []
            for url in raw_url_list:
                try:
                    url = url.childNodes[0].data
                    url = URL(url)
                except ValueError as ve:
                    msg = 'Sitemap    file    had    an    invalid    URL:    "%s"'
                    om.out.debug((msg % ve))
                except:
                    om.out.debug('Sitemap    file    had    an    invalid    format')
                else:
                    parsed_url_list.append(url)
            self.worker_pool.map(self.http_get_and_parse, parsed_url_list)
