Как кэшировать веб-страницу с помощью веб-программирования? - PullRequest
0 голосов
/ 18 мая 2011
  1. Я хочу написать веб-приложение, которое делает снимок веб-страницы таким, какой она есть сейчас. Под снимком я не имею в виду фото / изображение / изображение . Вместо этого я хочу сохранить веб-страницу вместе с JavaScript, CSS и изображениями, используемыми на веб-странице. Если есть фреймы, мне тоже нужно их обнаружить и сделать то же самое для URL источника фрейма.

    Другими словами, я хочу точно сделать то, что делал archive.org.

  2. Я не могу определиться с языком для реализации этого. Не могли бы вы помочь мне с этим тоже?

  3. РЕДАКТИРОВАТЬ: Кроме того, может ли кто-нибудь любезно обратиться к хранилищу этих снимков веб-страниц, так как их число со временем увеличивается? Моя идея состояла в том, чтобы создать уникальный идентификатор для снимка (может быть меткой времени), создать каталог с именем уникальный идентификатор (метка времени) и сохранить все файлы снимков непосредственно в нем, а затем сохранить справочную и мета-информацию о снимке в базе данных. Что-то не так с моим подходом? Есть ли лучший подход?

Ответы [ 4 ]

4 голосов
/ 18 мая 2011

Вы можете сделать это с любым языком, который имеет анализатор спуска HTML.Однако вы также хотите взглянуть на wget , который имеет замечательную функцию «зеркала» и выполняет переписывание ссылок для вас.

3 голосов
/ 18 мая 2011

В Python есть отличная библиотека для просмотра веб-сайтов, которая называется scrapy .Он имеет множество функций и отличных документов.Вы также можете написать свой собственный скребок, используя urllib2 или httplib2 , html5lib или lxml ... и т. Д. ... множество инструментовимеется в наличии.Первое, что я сделал, когда узнал, что Python - написать скребок, я не думаю, что вам будет очень сложно.

1 голос
/ 18 мая 2011

Вот быстрый, чрезмерно упрощенный рекурсивный загрузчик 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')
1 голос
/ 18 мая 2011

Эта ссылка показывает, как, используя VB.NET, очистить все ссылки со страницы.

http://www.consultsarath.com/contents/articles/KB000017-web-scraping--extract-all-links-from-a-web-page-using-vbnet.aspx

Вы бы использовали аналогичный метод для получения ссылок на все изображения, сценарии и т. Д.

Затем вам нужно немного логики, чтобы определить, какие из указанных файлов нужно загрузить.

Вы хотели бы большинство изображений, но, возможно, не все сценарии. (Вам действительно нужна копия jquery для каждой веб-страницы? Лучше всего ее хешировать в центральном месте, вероятно).

Я бы держался подальше от PHP. Python или VB.NET являются логическим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...