基本上,我做的是这样的:简单的HTML DOM解析器慢
- 由埃文斯获得第10名球员/名在该列表中:http://www.tibia.com/community/?subtopic=worlds&world=Aurora
- 从每个获取最新的死亡信息球员(这里是一个例子球员:http://www.tibia.com/community/?subtopic=characters&name=Aaploo)
- 打印最近的死亡日期。
我正在使用PHP的Simple HTML Dom。
我的问题是,需要7秒钟将结果加载到我的页面上10个名字。这份名单在一天中通常有1000个名字。这意味着整个列表可能需要15分钟才能完成处理。 这是什么?还是可以减少?
这里是一个结果的示例快照:
这里是我使用的代码:所推荐的超
<?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;
simple_html_dom反正慢。当你用纯PHP进行所有分析时,会发生这种情况。如果您想要速度,请尝试DOMDocument和DOMXPath。他们使用本地代码(libxml)来进行解析,并且可以处理任何不是骨头错位的HTML。 – cHao
对于为每个游戏角色抓取页面也没什么帮助,特别是使用simple_html_dom解析它。 – cHao
好的,所以我使用DOMDocument和DOMXPath在底部使用了一个新的快速示例代码对原始文章进行了编辑。我知道现在它不能工作,但这就是我现在所拥有的。如果有什么我可能做错了,请让我知道。 – Evan