带分页的简单HTML DOM

时间:2016-11-16 18:11:48

标签: php

我想用分页帖子解析网站类别的值。我需要的信息是内部帖子。我尝试使用Simple HTML DOM来做到这一点。我明白了,但我认为这不对。脚本工作缓慢,有大量数据我得到错误

  

最长执行超时300秒

 <?php

    include('simple_html_dom.php');

    $total_pages=600;
    $i = 1;

    while ($i <= $total_pages):

$html = file_get_html(''.$url.'/'.$from.'');

foreach($html->find('.itemReview h3 a') as $a) {

    $post = file_get_html('http://www.website.com/'.$a->href.'');

    $author_mail = $post->find('.sellerAreaSecond',0);
    $author_mail = $post->plaintext;
    $a_mail_array[] = $author_mail;
}


$fp = fopen('file.csv', 'w');

foreach( $a_mail_array as $ddd) {
fputcsv($fp, array($ddd));



   }
    fclose($fp);


$from++;
endwhile;


    ?>

2 个答案:

答案 0 :(得分:0)

当您通过网络请求您的页面以及其中的帖子时,当然这很慢并且您会遇到大量数据的脚本超时。尝试增加你的php.ini文件中的最大执行时间。

答案 1 :(得分:0)

一种解决方案是增加服务器设置的时间限制(php.ini)

更好的方法是让服务器从自身下载100页并解析它们。解析HTML需要花费大量时间,它必须遍历所有代码并找到您的.read_more a.authoremail。我怀疑你正在处理普通文件以进行数据存储,如果你应该切换到像MySQL甚至SQLite这样的数据库,那么你可以只查询数据库 - 这需要相当少的时间。这不仅会让您的网站在更多内容时崩溃,而且还会加快速度。

使用SQL,您只需将作者的电子邮件存储在表格中,然后使用SELECT authoremail FROM posts,然后使用foreach()。这使您可以在运行时按日期,名称等进行排序。只是让你的网站运行缓慢而低效,我增加时间限制可能不是一个好主意。