当前位置: 首页 > 面试题库 >

如何使用PHP创建简单的搜寻器?

舒俊雄
2023-03-14
问题内容

我有一个带有一堆链接的网页。我想编写一个脚本,将所有链接中包含的所有数据转储到本地文件中。

有没有人用PHP做到这一点?一般准则和陷阱就可以作为答案。


问题答案:

这是受Tatu启发的DOM版本:

<?php
function crawl_page($url, $depth = 5)
{
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    $seen[$url] = true;

    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) && isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1).$path;
            }
        }
        crawl_page($href, $depth - 1);
    }
    echo "URL:",$url,PHP_EOL,"CONTENT:",PHP_EOL,$dom->saveHTML(),PHP_EOL,PHP_EOL;
}
crawl_page("http://hobodave.com", 2);

编辑: 我修复了Tatu版本的一些错误(现在可以使用相对URL)。

编辑: 我添加了新的功能,以防止它两次跟踪相同的URL。

编辑: 现在将输出回显到STDOUT,以便您可以将其重定向到所需的任何文件

编辑:
修复了乔治在回答中指出的错误。相对网址将不再追加到网址路径的末尾,而是将其覆盖。感谢乔治。请注意,乔治的答案不考虑以下任何一项:https,用户,密码或端口。如果您加载了http
PECL扩展名,则可以使用http_build_url轻松完成。否则,我必须使用parse_url手动粘合在一起。再次感谢乔治。



 类似资料:
  • 本文向大家介绍iOS 如何使用UIBezierPath创建简单的形状,包括了iOS 如何使用UIBezierPath创建简单的形状的使用技巧和注意事项,需要的朋友参考一下 示例 对于一个简单的圈子: 迅速: 对于一个简单的矩形: 迅速: 对于简单的一行: 迅速: 半圈: 迅速: 对于一个简单的三角形: 迅速:            

  • 问题内容: 我正在创建一个允许用户提交报价的网站。如何创建返回最相关引号的(相对简单?)搜索? 例如,如果搜索词是“土耳其”,那么我将返回引号,其中单词“土耳其”出现两次,而引号则只出现一次。 (我会添加一些其他规则来帮助过滤掉不相关的结果,但是我主要担心的是。) 问题答案: 每个人都建议使用MySQL全文搜索,但是您应该注意一个巨大的警告。全文搜索引擎仅适用于MyISAM引擎(不适用于InnoD

  • 问题内容: 我正在寻找一个简单的示例代码或完整的教程,以了解如何使用Apache POI及其底层文件创建文件。 我尝试下面的代码(有 很多 从内容的帮助,协助,感谢Eclipse的!),但代码不能正常工作。 引发的异常如下: 有人可以帮助我解决我的要求吗? 问题答案: 这是使用POI创建简单的docx文件的方法:

  • 本文向大家介绍PHP简单创建日历的方法,包括了PHP简单创建日历的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP简单创建日历的方法。分享给大家供大家参考,具体如下: 运行结果如下图所示: 关于在线显示日期还可参考本站在线工具: 在线万年历日历 网页万年历日历 在线万年历黄历flash版 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php日期与时间用法总结》、《PHP数学

  • 我所拥有的只是WS服务器的url和授权字符串令牌。 稍后,我必须能够向该连接发送请求,监听来自WS服务器的即将到来的数据,并关闭连接。我对这个新的WS世界有困难,总是只使用REST(也使用okhttp3)

  • 问题内容: 我正在尝试找到用于创建图形关系的简单Java API。它应该有这样一些功能,,,,等我不需要UI,只是逻辑。 我找到了很多学术项目,但似乎没有一个是“ 权威图形API ”。 有人知道这样的API吗? 问题答案: JGraphT听起来像您追求的那样。 JGraphT是一个免费的Java图形库,提供数学图形理论对象和算法。JGraphT支持各种类型的图。 他们的API可以从各种输入创建图形