使用PHP获取网页的一部分

时间:2012-09-22 15:48:24

标签: php parsing search minecraft

我需要一种方法来只获取具有特定ID的元素并使用PHP显示它。我是一个PHP菜鸟,所以到目前为止这一直非常困难。所有其他类似的问题都有点过于复杂,所以我想知道是否有人可以向我解释。

为了更具体地说明我想要的东西,我正在拼写搜索一个Minecraft服务器。我们的网站是http://pvpzone.org/,wiki位于http://pvpzone.wikispaces.com/。每个法术在维基上都有一个页面,就像“Vanish”中的一个是pvpzone.wikispaces.com/Vanish。拼写搜索的想法是查找咒语的更简单方法,您输入咒语名称并获得结果。 div'wiki wikiPage'中包含拼写数据。我想得到那个div并显示它。遗憾的是,我无法连接到任何形式的法术数据库,它由Wikispaces托管,他们不允许这样做。

我希望这一点很清楚,如果你愿意,可以问我更多细节。以下是我到目前为止的情况:

<?php
if(isset($_POST['submit']))
{
    $spell=$_POST['spell'];
    $pvpwiki="http://pvpzone.wikispaces.com/";
    $site=$pvpwiki . $spell;
    $submit=true;
}
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <title>Spell search</title>
    </head>
    <body>
        <form name="spellsearch" id="spellsearchform" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <input type="text" name="spell" value="<?php if(!isset($_POST['submit'])){echo("Vanish");}?>"></input>
            <input type="submit" value="Search" name="submit"></input>
        </form>
            <?php
                $doc = new DomDocument;
                $doc->validateOnParse = true;
                $doc->loadHtml(file_get_contents($site));
                var_dump($doc->getElementById('wiki wikiPage'));

                if($doc == false && $submit)
                {
                    echo("<br />" . "That is not a spell!");
                }
            ?>
    </body>
</html>

我现在的问题是我得到一个解析错误(警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:ID target_editor已经在Entity中定义,第212行/ home / content / d / e / x第24行/dext0459/html/russellsayshi/phpspellsearch.php NULL),我真的很感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您看到的错误消息只是一个警告:

  

警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:已在实体中定义的ID target_editor,在/home/content/d/e/x/dext0459/html/russellsayshi/phpspellsearch.php中的第212行: 24 NULL

你可以忽略这些,他们不会阻止你。如果您在网站上看到它们,但未正确配置,则应记录错误,而不是显示错误。

无论如何,对于那个库,您也可以通过这种方式禁用它们:

libxml_use_internal_errors(true);

在加载HTML之前调用它。那个HTML顺便说一下。我尝试使用该网站时没有导致错误。

下一个错误是你正在寻找一个不是ID的课程。请改为寻找ID:

$div = $doc->getElementById('content_view');

整个代码示例:

function get_wiki_page_div($page)
{
    $url = sprintf('http://pvpzone.wikispaces.com/%s', urlencode($page));

    $doc = new DOMDocument();
    $doc->validateOnParse = true;
    libxml_use_internal_errors(true);

    $doc->loadHTMLFile($url);

    $div = $doc->getElementById('content_view');

    if (!$div) {
        return false;
    }

    return $doc->saveXML($div);
}

用法:

<?php
$submit = isset($_POST['submit']);
if ($submit)
{
    $spell  = $_POST['spell'];
    $result = get_wiki_page_div($spell);
}
?>

...


<?php
if ($submit)
{
    echo $result ? $result : '<div>This is not a Spell!</div>';
}
?>