Php 如何使用web编程缓存网页?
我想写一个web应用程序,它可以照现在的样子拍摄网页的快照我所说的快照不是指照片/图像/图片。相反,我想保存网页以及网页中使用的Java脚本、CSS和图像。如果存在帧,我也需要检测它们,并对帧源URL执行相同的操作 换句话说,我想做archive.org一直在做的事情Php 如何使用web编程缓存网页?,php,asp.net,python,language-agnostic,Php,Asp.net,Python,Language Agnostic,我想写一个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
是我第一个想到的东西,当然是最简单的网站。