使用PHPQuery的问题

Mir*_*rod 2 php parsing simple-html-dom phpquery

我试图使用PHPquery来抓取网页(free-lance.ru)

Simple HTML Dom中的Equiv代码正在工作:

include('simple_html_dom.php');

$shd = str_get_html($html);

$projects = array();
$i = 0;
foreach ($shd->find('.project-preview') as $work){
    $projects[$i]['name'] = $work->find('h3', 0)->children(1)->plaintext;
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

但我需要它在PHPQuery中.

我尝试使用类似的东西:

include('phpQuery.php');

$pq = phpQuery::newDocument($html);

foreach ($pq->find('.project-preview') as $work){
        echo 'wow';
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用... sizeof($ pq-> find('.project-preview'))为0

我将非常感谢任何帮助.

Koa*_*ear 8

我有同样的问题!所以回答这个问题的下一个访问者.

简单的HTML Dom有一些内存泄漏问题.当你通过选择器"克隆"对象时,你必须非常小心.躲开它!

据我所知,使用phpQuery只有一个命令可以清除所有内容.

phpQuery::unloadDocuments();
Run Code Online (Sandbox Code Playgroud)

我测试了phpQuery.看起来它没有内存泄漏.内存使用率也非常低.在90 kB的文件上只有4 kB.所以看起来它实时解析并且没有内存中的文档.至少那是我发现的,我可能是错的.

还尝试创建20-30个文档并且每次都使用卸载,没有内存增加......很好!

这是我的回答:

include('phpQuery.php');

$pq = phpQuery::newDocument($html);

$projects = array();
$i = 0;

foreach ($pq['.project-preview'] as $work) {
    // iteration returns PLAIN dom nodes, NOT phpQuery objects
    $pqwork = pq($work);

    $projects[$i]['name'] = $pqwork['div']->eq(1)->text();
    // Unfortunately pq($work)['div']->eq(1)->text(); does not work

    $i++;
}

phpQuery::unloadDocuments();
Run Code Online (Sandbox Code Playgroud)

如果我们有更多基本的例子,那就太好了!好的项目,糟糕的文档.或者至少我找不到解释text()函数的文档.

基准估计:

  • phpQuery在加载文档时快了~3.5.

  • 简单的HTML Dom在选择时看起来快〜30%:(