我想讀它有一個大的HTML表格,看起來像這樣一個12MB +文件:是否有可能加快phpQuery?
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
</tr>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
<td>e</td>
</tr>
<tr>..... up to 20,000+ rows....</tr>
</table>
現在,這是我如何刮它:
<?
require_once 'phpQuery-onefile.php';
$d = phpQuery::newDocumentFile('http://localhost/test.html');
$last_index = 20000;
for ($i = 1; $i <= $last_index; $i++)
{
$set['c1'] = $d['tr:eq('.$i.') td:eq(0)']->text();
$set['c2'] = $d['tr:eq('.$i.') td:eq(1)']->text();
$set['c3'] = $d['tr:eq('.$i.') td:eq(2)']->text();
$set['c4'] = $d['tr:eq('.$i.') td:eq(3)']->text();
$set['c5'] = $d['tr:eq('.$i.') td:eq(4)']->text();
}
// code to insert to db here...
?>
我的基準說,這需要大約5.25小時颳去並插入1,000行到db。根據這些數據,只需要5天就可以完成整個20,000多行。
我的本地機器上運行:
- XAMPP
- Win 7的
- PROC,酷睿i3 2100爲3.1GHz
- RAM,芝奇RipJaws X 4GB雙
- HDD,老SATA
有沒有什麼辦法可以加快這個過程?也許我是在用錯誤的方式刮擦它?請注意,該文件是在本地訪問因此我用http://localhost/test.html
稍快的解決方案:
for ($i = 1; $i <= $last_index; $i++)
{
$r = $d['tr:eq('.$i.')'];
$set['c1'] = $r['td:eq(0)']->text();
$set['c2'] = $r['td:eq(1)']->text();
$set['c3'] = $r['td:eq(2)']->text();
$set['c4'] = $r['td:eq(3)']->text();
$set['c5'] = $r['td:eq(4)']->text();
}
// code to insert to db here...
?>
您應該使用現成的表格提取庫,而不是自己收集數據。 (例如http://blog.mspace.fm/2009/10/14/parse-an-html-table-with-php/ - 儘管你必須小心,如果這個正則表達式對你的情況來說足夠強大。) – mario
@mario是不是phpQuery已經是一個現成的庫? – IMB