Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP下载HTML?_Php_Html_Scripting_Download - Fatal编程技术网

如何使用PHP下载HTML?

如何使用PHP下载HTML?,php,html,scripting,download,Php,Html,Scripting,Download,如何从PHP中的URL下载HTML文件,下载CSS和图像等所有依赖项,并将它们作为文件存储到服务器?我要求的太多了吗?屏幕抓取可能是最好的答案。您可以看看PHP的卷曲包装: 至于依赖项,您可能会得到很多使用正则表达式的依赖项,这些正则表达式可以查找,但是适当的(X)HTML解析器可以让您更有效地遍历DOM。我建议使用HTML解析库来简化一切。也就是说 使用简单HTML DOM: $html = file_get_html('http://www.google.com/'); foreach($h

如何从PHP中的URL下载HTML文件,下载CSS和图像等所有依赖项,并将它们作为文件存储到服务器?我要求的太多了吗?

屏幕抓取可能是最好的答案。

您可以看看PHP的卷曲包装:


至于依赖项,您可能会得到很多使用正则表达式的依赖项,这些正则表达式可以查找
,但是适当的(X)HTML解析器可以让您更有效地遍历DOM。

我建议使用HTML解析库来简化一切。也就是说

使用简单HTML DOM:

$html = file_get_html('http://www.google.com/');
foreach($html->find('img') as $element){
    //download image
}
对于下载文件(和html),我建议使用诸如curl之类的HTTP包装器,因为它允许对文件内容的使用进行更多的控制。但是,如果您想使用file_get_内容,php站点上有一些关于如何获取URL的信息

更复杂的方法允许您指定头,如果您想设置用户代理,这可能很有用。(如果你经常删除其他网站,最好有一个自定义用户代理,因为如果你使用太多带宽,你可以使用它让网站管理员管理你的网站或联系点,这比管理员阻止你的IP地址要好)

当然,这可以通过以下方式实现:

$file = file_get_contents('http://www.example.com/');

你想看的图书馆是。cURL执行与HTTP请求(和其他网络协议,但我敢打赌HTTP是最常用的)相关的操作。您可以设置HTTP cookie以及GET/POST变量

我不确定它是否会自动下载依赖项—您可能需要下载HTML,解析IMG/LINK标记,然后再次使用cURL获取这些依赖项

关于如何做到这一点,有大量的教程。(滚动至底部)获取来自libcurl(PHP的cURL绑定基于此)开发者的基本HTTP GET请求:



最简单的方法是使用。它可以递归地下载HTML及其依赖项。否则,您将自己解析html。请参阅Yacoby的答案,了解用纯php实现的详细信息

Perls Mechanize在这方面做得很好。有一个库执行与mechanize类似的任务,但在回答这个问题时,它是针对PHP的:


我认为大多数选项都包含在有关PHP和屏幕抓取的问题中

比如说 或


我意识到你想要的不仅仅是一个屏幕刮板,但我认为这些问题会回答你的问题。

我不是你的反对者,但使用正则表达式解析html会让你受到伤害。永远不要使用正则表达式解析html。为什么:我完全明白为什么用正则表达式“解析”(不可能)HTML是个坏主意。您应该注意到,我特别没有使用parse这个词,因为我的意思是您可以使用regex来“查找东西”,而不是“解析”。
$file = file_get_contents('http://www.example.com/');
<?php
//
// A very simple example that gets a HTTP page.
//

$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
curl_setopt ($ch, CURLOPT_HEADER, 0);

curl_exec ($ch);

curl_close ($ch);
?>