17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

eturn ''.join(self._result)<br />

def handle_data(self, data):<br />

self._result.append(data)<br />

def handle_comment(self, comment):<br />

self._result.append('' % comment)<br />

def handle_entyref(self, ref):<br />

x = ';&apos; * ref in self.entitydefs<br />

self._result.append('&%s%s' % (ref, x))<br />

def handle_charref(self, ref):<br />

self._result.append('&#%s' % ref)<br />

class WebPage(object):<br />

"""Pointe une page web et permet sa sérialisation<br />

"""<br />

def __init__(self, url):<br />

self.url = url<br />

def _get_content(self, url):<br />

req = urllib2.Request(url)<br />

try:<br />

return urllib2.urlopen(req).read()<br />

except urllib2.URLError:<br />

return ''<br />

Exercices corrigés<br />

CHAPITRE 11<br />

def _clean_url(self, url):<br />

scheme, netloc, path, query, fragment = urlsplit(url)<br />

if scheme == '':<br />

scheme = 'http'<br />

return urlunsplit((scheme, netloc, path, query, fragment))<br />

def _replace_source(self, source):<br />

source = self._clean_url(source)<br />

if source not in self._media:<br />

filename = join('_files', 'file_%s' % self._count)<br />

self._media[source] = filename<br />

content = self._get_content(source)<br />

with open(filename, 'w') as f:<br />

f.write(content)<br />

self._count += 1<br />

return self._media[source]<br />

def _media_needed(self, tag, attribut, valeur):<br />

"""Téléchargement et modification du lien si nécessaire."""<br />

if (tag.lower() in ('img', 'link', 'script') and<br />

attribut.lower() in ('href', 'src')):<br />

return self._replace_source(valeur)<br />

377

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!