基本上,我做的是這樣的:簡單的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