互联网上有许多工具可用于下载网站的静态副本,例如HTTrack。还有许多工具,一些商业用于“抓取”来自网站的内容,例如Mozenda。然后有一些工具显然内置在PHP和* nix等程序中,你可以在其中“file_get_contents”或“wget”或“cURL”或只是“file()”。
我对所有这些感到非常困惑,我认为主要原因是我遇到的所有描述都没有使用相同的词汇。从表面上看,至少看起来他们都在做同样的事情,但也许不是。
这是我的问题。这些工具到底在做什么?他们做同样的事吗?他们是通过不同的技术做同样的事吗?如果他们没有做同样的事情,他们有什么不同?
答案 0 :(得分:12)
首先,让我澄清“镜像”和“刮擦”之间的区别。
镜像是指下载网站的全部内容或其中的一些重要部分(包括HTML,图像,脚本,CSS样式表等)。这通常是为了保留和扩展对有价值(通常是有限的)互联网资源的访问,或者添加额外的故障转移冗余。例如,许多大学和IT公司反映了各种Linux供应商的发布档案。镜像可能意味着您计划在自己的服务器上托管该网站的副本(原始内容所有者的许可)。
刮痧是指从网站复制和提取一些有趣的数据。与镜像不同,抓取针对特定数据集(名称,电话号码,股票报价等)而不是站点的整个内容。例如,您可以“刮取”美国人口普查局的平均收入数据或Google财经的股票报价。这有时是针对主持人的条款和条件进行的,这使其成为非法行为。
这两者可以组合在一起,以便将数据复制(镜像)与信息提取(抓取)问题分开。例如,您可能会发现镜像站点的速度更快,如果数据的提取和分析速度很慢或过程密集,则会刮掉本地副本。
回答你的其余问题......
file_get_contents
和file
PHP函数用于从本地或远程计算机读取文件。该文件可以是HTML文件,也可以是其他内容,如文本文件或电子表格。这不是“镜像”或“抓取”通常所指的,尽管您可以使用这些来编写自己的基于PHP的镜像/刮刀。
wget
和curl
是命令行独立程序,用于使用各种选项,条件和协议从远程服务器下载一个或多个文件。两者都是非常强大且受欢迎的工具,主要区别在于wget
具有丰富的内置功能,可用于镜像整个网站。
HTTrack
在其意图中类似于wget
,但使用GUI而不是命令行。这使得它更容易用于那些不方便从终端运行命令的人,但代价是失去wget
提供的功能和灵活性。
您可以使用HTTrack
和wget
进行镜像,但如果这是您的最终目标,则必须在生成的下载数据上运行您自己的程序以提取(抓取)信息。
Mozenda
是一个刮刀,与HTTrack
不同,wget
或curl
允许您定位要提取的特定数据,而不是盲目地复制所有内容。然而,我对它几乎没有经验。
P.S。我通常使用wget
来镜像我感兴趣的HTML页面,然后运行Ruby和R脚本的组合来提取和分析数据。
答案 1 :(得分:2)
还有一件事,而不是技术性的,可以说: 在下载(镜像)期间,HTTrack / wget / curl不仅下载了许多HTML文件,而且还更改了这些文件中的内部链接 - 因此,这些链接允许在新位置(或新位置)正确“运行”下载的网页域名或您当地的)。这些内部链接包括:从一个下载页面到另一个下载页面的链接,嵌入图像和其他媒体的链接以及指向“辅助”文件的链接,如javascripts,ccs等。