简单的HTML DOM解析器行动缓慢

时间:2014-01-12 00:55:29

标签: php html dom

基本上,我正在做的是:

  1. 通过evens获得该列表中的前10个玩家/名称:http://www.tibia.com/community/?subtopic=worlds&world=Aurora
  2. 从每个玩家那里获取最新的死亡信息(以下是一个示例玩家:http://www.tibia.com/community/?subtopic=characters&name=Aaploo
  3. 打印最近死亡的日期。
  4. 我正在使用Simple HTML Dom for PHP。

    我的问题是,将结果加载到我的页面上需要7秒才能获得10个名字。这个列表在一天中通常有1000个名字。这意味着整个列表可能需要15分钟才能完成处理。 这是什么?还是可以减少?

    以下是结果的示例快照:

    enter image description here

    以下是我正在使用的代码:

    <?php
    
    include ('simple_html_dom.php');
    
    $start_time = microtime(true);
    
    
    $html = file_get_html('http://www.tibia.com/community/?subtopic=worlds&world=Aurora');
    $table = $html->find('table[class=Table2]');
    $table = $table[0];
    
        $a2 = $table->find('tr[class=Even]');
    for ($i = 0; $i < 10; $i++)
    {
        $a = $a2[$i];
        $player = $a->find('a');
        $player = $player[0];
        echo $player->href . '<br>';
        $html2 = file_get_html($player->href);
        $date = $html2->find('[@id="characters"]/div[5]/div/div/table[3]/tbody/tr[2]/td[1]');
        $date = $date[0];
        echo "Most recent death date: " . $date . '<br>';
        $dateArr = explode(" ", $date);
        $dateArr = $dateArr[0];
        echo sizeof($dateArr) . '<br>';
        //for ($k = 0; count($dateArr[0]); $k++)
        //{
        //  echo $dateArr[0][$k] . '<br>';
        //}
    }
    
    echo "<br><br>This page was generated in " . (number_format(microtime(true) - $start_time, 2)) ." seconds.";
    
    ?>
    

    cHao推荐的EDIT / NEW方式:

    $html = file_get_contents('http://www.tibia.com/community/?subtopic=worlds&world=Aurora');
    $html2 = file_get_contents('http://www.tibia.com/community/?subtopic=characters&name=Aarkanito');
    $dom = new domDocument;
    $xpath = new domXpath($dom);
    $dom->loadHTML($html2);
    
    $a2 = $xpath->query('[@id="characters"]/div[5]/div/div/table[3]/tbody/tr[2]/td[1]');
    $a2 = $a2[0];
    
    echo "Latest death: " . $a2;
    

2 个答案:

答案 0 :(得分:1)

您正在尝试获取大量页面,可能不是现在,但是因为您询问了整个列表。我只是在我的网站上尝试过它,加载主页面需要0.75秒,每个播放器页面平均需要0.23秒。因此,如果你想下载每个统计数据,它应该花费你不到4分钟。

通常当我不得不刮一页并且抓取费用很多时我会使用谷歌缓存但是来自tibia.com的结果甚至比谷歌缓存更好(约0.3秒)。但即使您想要,也无法使用谷歌缓存,因为它不适用于GET方法,因此您无法发送参数。

没有一种真正的方法来加快这个过程,因为,记住,你想要一次刮掉超过1K的页面。如果我是你,我会害怕而不是被禁止。如果你继续做你正在做的事情,很有可能。你真的确定你需要这么多信息吗?

答案 1 :(得分:1)

最好的方法是在本地保存html,然后编写另一个用于抓取信息的脚本。这样,您可以随时使用解析脚本修改,优化,获取更多信息。