我可以解析外部网页的目录列表吗?

时间:2011-07-21 09:00:25

标签: php

是否可以解析外部网页的目录列表,因为网页是可访问的,并且在我访问它时会显示文件列表。我只想知道是否有可能在PHP中动态解析文件以及如何? - 谢谢你

很抱歉不清楚。我的意思是目录列表,例如: http://www.ibiblio.org/pub/(索引/ ..)以及将内容作为数组或易于在我的脚本中操作的内容的能力

4 个答案:

答案 0 :(得分:4)

您可以使用preg_matchDomDocument

对于你的情况:

$contents = file_get_contents("http://www.ibiblio.org/pub/");
preg_match_All("|href=[\"'](.*?)[\"']|", $contents, $hrefs);
var_dump($hrefs);

如果你想看看working demo

答案 1 :(得分:2)

如果您在正确的XHTML文档中获得了一个充满链接的目录列表,您可以使用DOMDocument,并使用以下代码来获取文件列表:

$doc = new DOMDocument();
$doc->preserveWhitespace = false;
$doc->load('directorylisting.html');

$files = $doc->getElementsByTagName('a');

$files现在是DOMElement的列表,您可以迭代并获取href属性以获取列表中文件的完整路径。

请注意,此方法需要从服务器返回的正确格式的目录列表。例如,您不能在stackoverflow.com上执行请求并获取文件的目录列表。

如果这不起作用(可能是格式错误的HTML),您可以使用正则表达式(例如preg_match_all)来查找<a标记,例如:

preg_match_all('@<a href\="([a-zA-Z\.\-\_\/ ]*)">(.*)</a>@', file_get_contents('http://www.ibiblio.org/pub/'), $files);
var_dump($files);

$files仍然是匹配的元素,只是一组数组。


更新,我使用您的网址(http://www.ibiblio.org/pub/进行了测试)并且工作正常(preg_match_all方法)。

答案 2 :(得分:0)

是的,这是非常可能的。我不太清楚您的目录列表是什么意思,但您应该研究网站抓取工具。这基本上就是你所要求的,但用PHP编写。

答案 3 :(得分:0)

PHP file_get_content将为您解决问题。

(假设您对此页面的http请求返回文件列表,正如您所提到的那样)