def get_biblio_for_id(self, 
            id,
            provider_url_template=None, 
            cache_enabled=True):

        logger.debug(u"%20s getting biblio for %s" % (self.provider_name, id))

        if not provider_url_template:
            provider_url_template = self.biblio_url_template
        url = self._get_templated_url(provider_url_template, id, "biblio")

        # try to get a response from the data provider 
        try:      
            response = self.http_get(url, cache_enabled=cache_enabled, allow_redirects=True)
        except provider.ProviderTimeout:
            logger.info(u"%20s ProviderTimeout getting %s so giving up on webpage biblio" 
                % (self.provider_name, id))
            return {}
        except provider.ProviderHttpError:
            logger.info(u"%20s ProviderHttpError getting %s so giving up on webpage biblio" 
                % (self.provider_name, id))
            return {}

        if response.status_code != 200:
            logger.info(u"%20s status_code=%i getting %s so giving up on webpage biblio" 
                % (self.provider_name, response.status_code, id))            
            return {}
        
        # extract the aliases
        try:
            biblio_dict = self._extract_biblio(response.text, id)
        except __HOLE__:  #sometimes has a response but no text in it
            return {}

        return biblio_dict

    # use lxml because is html
dataset/ETHPy150Open Impactstory/total-impact-webapp/totalimpact/providers/webpage.py/Webpage.get_biblio_for_id