Much better!

I think it still needs ```combined_url = urlparse.urljoin(self.base_url, url)``` as it may handle more edge cases than your code (and is much shorter).

Also I think creating a method called something like _load_external_url and containing the following would save duplicating the code.

````
r = urllib2.urlopen(url)
_, params = cgi.parse_header(r.headers.get('Content-Type', ''))
encoding = params.get('charset', 'utf-8')
return r.read().decode(encoding)
```

Also URLError needs to be ```urllib2.URLError``` if you catch it.

I'll leave the rest to Peter. :)