Вот быстрый, чрезмерно упрощенный рекурсивный загрузчик Python, чтобы дать вам представление о том, как urllib2
и lxml
могут использоваться вместе для архивирования страниц и связанных ресурсов , Обрабатывает изображения и сценарии на данный момент:
import cookielib, os, lxml.html, re, urlparse, urllib2
re_unsafe = re.compile('[^\w\.]')
jar = cookielib.CookieJar()
opener = urllib2.build_opener(*[urllib2.HTTPCookieProcessor(jar)])
def fetch(url):
return opener.open(urllib2.Request(url)).read()
def save(url, data, prefix='assets'):
path = os.path.join(prefix, re_unsafe.sub('_', url))
if not os.path.exists(prefix):
os.makedirs(prefix)
open(path, 'wb').write(data)
return path
def archive(url):
tree = lxml.html.fromstring(fetch(url))
for tag, attr in [('img','src'),('script','src')]:
for node in tree.xpath('//%s' % tag):
orig = node.attrib.get(attr)
if orig:
orig = urlparse.urljoin(url, orig)
node.attrib[attr] = save(orig, fetch(orig))
print 'saved', save(url, lxml.html.tostring(tree), '.')
archive('http://www.yahoo.com')