我想读它有一个大的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