2014-01-12 136 views
0

基本上,我做的是这样的:简单的HTML DOM解析器慢

  1. 由埃文斯获得第10名球员/名在该列表中:http://www.tibia.com/community/?subtopic=worlds&world=Aurora
  2. 从每个获取最新的死亡信息球员(这里是一个例子球员:http://www.tibia.com/community/?subtopic=characters&name=Aaploo
  3. 打印最近的死亡日期。

我正在使用PHP的Simple HTML Dom。

我的问题是,需要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."; 

?> 

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; 
+1

simple_html_dom反正慢。当你用纯PHP进行所有分析时,会发生这种情况。如果您想要速度,请尝试DOMDocument和DOMXPath。他们使用本地代码(libxml)来进行解析,并且可以处理任何不是骨头错位的HTML。 – cHao

+0

对于为每个游戏角色抓取页面也没什么帮助,特别是使用simple_html_dom解析它。 – cHao

+0

好的,所以我使用DOMDocument和DOMXPath在底部使用了一个新的快速示例代码对原始文章进行了编辑。我知道现在它不能工作,但这就是我现在所拥有的。如果有什么我可能做错了,请让我知道。 – Evan

回答

1

您正尝试获取大量网页,可能不是现在,但是因为你在询问整个清单。我刚刚在我的网站上尝试过,它花费了0.75秒来加载主页面,每个页面的平均时间为0.23秒。所以如果你想下载所有的统计数据,你应该花费不到4分钟的时间。

通常,当我不得不刮去一个页面并且刮了很多东西时,我会使用google缓存,但tibia.com的结果甚至比google缓存(约0.3秒)更好。然而,即使你想,你也不能使用谷歌缓存,因为它不适用GET方法,所以你不能发送参数。

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

+0

刮是违法的?我不知道。感谢您告诉我: – Evan

+0

这不是非法的,但大多数网站并不喜欢它。检查服务条款,看看他们是否说你不允许。 – cHao

1

最好的办法是在本地保存html,然后编写另一个脚本来擦除信息。通过这种方式,您可以随时修改,优化,在稍后的时间点通过解析脚本获取更多信息。