Php 如何使用web编程缓存网页?

Php 如何使用web编程缓存网页?,php,asp.net,python,language-agnostic,Php,Asp.net,Python,Language Agnostic,我想写一个web应用程序,它可以照现在的样子拍摄网页的快照我所说的快照不是指照片/图像/图片。相反,我想保存网页以及网页中使用的Java脚本、CSS和图像。如果存在帧,我也需要检测它们,并对帧源URL执行相同的操作 换句话说,我想做archive.org一直在做的事情 我无法决定实现这个的语言。你也能帮我吗 编辑:另外,随着这些网页快照的数量随时间的推移而增加,任何人都可以解决这些网页快照的存储问题吗?我的想法是为快照创建一个唯一的ID(可能是时间戳),创建一个名为Unique ID(时间戳

我想写一个web应用程序,它可以照现在的样子拍摄网页的快照我所说的快照不是指照片/图像/图片。相反,我想保存网页以及网页中使用的Java脚本、CSS和图像。如果存在帧,我也需要检测它们,并对帧源URL执行相同的操作

换句话说,我想做archive.org一直在做的事情

  • 我无法决定实现这个的语言。你也能帮我吗

  • 编辑:另外,随着这些网页快照的数量随时间的推移而增加,任何人都可以解决这些网页快照的存储问题吗?我的想法是为快照创建一个唯一的ID(可能是时间戳),创建一个名为Unique ID(时间戳)的目录,并将所有快照文件直接存储在该目录中,然后将有关快照的引用和元信息存储在数据库中。我的方法有什么问题吗?有没有更好的办法


  • Python有一个很棒的库,来自于名为。它有大量的功能和优秀的文档。或者,您可以使用、或、或…等多种可用工具编写自己的刮刀。当我学习Python时,我做的第一件事就是编写一个scraper,我想你不会觉得这很难。

    你可以用任何有HTML解析器的语言来完成这项工作。无论如何,你可能还想看看哪一个有很好的“镜像”功能,并且可以为你重写链接。

    这个链接展示了如何使用VB.NET从页面中删除所有链接

    您可以使用类似的方法获取指向所有图像、脚本等的链接

    然后,您需要一些逻辑来确定要下载哪些引用文件

    您可能需要大多数图像,但可能不是所有脚本。(您真的希望每个网页都有一份jquery吗?最好在一个中心位置散列这些内容)


    为此,我会远离PHP。Python或VB.NET是合乎逻辑的选择

    这里有一个快速、过于简化的Python递归下载程序,让您了解如何和可以一起用于归档页面和链接资产。目前处理图像和脚本:

    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')
    

    我将为此向您推荐php。它有很多文件IO包装器和函数以及一些其他额外的扩展。事实上,
    wget--mirror
    是我第一个想到的东西,当然是最简单的网站。