Php Xpath和foreach-forvever函数

Php Xpath和foreach-forvever函数,php,web-scraping,Php,Web Scraping,这里我有一个脚本,但3foreach函数太长,我有一个和INterneal服务器错误。我可以用卷发之类的东西来修吗 代码如下: <?php $dom = new DOMDocument(); @$dom->loadHTMLFile('http://www.auto-types.com'); $xpath = new DOMXPath($dom); $entries = $xpath->query("//li[@class='clearfix_center']/a/@href"

这里我有一个脚本,但3foreach函数太长,我有一个和INterneal服务器错误。我可以用卷发之类的东西来修吗

代码如下:

<?php

$dom = new DOMDocument();
@$dom->loadHTMLFile('http://www.auto-types.com');
$xpath = new DOMXPath($dom);
$entries = $xpath->query("//li[@class='clearfix_center']/a/@href");
$output = array();
foreach($entries as $e) {  
  $dom2 = new DOMDocument();
  @$dom2->loadHTMLFile('http://www.auto-types.com' . $e->textContent);
  $xpath2 = new DOMXPath($dom2);
  $data = array();
  $items = $xpath2->query("//div[@class='modelImage']/a/@href");
  $links = array();
  foreach($items as $item) {
    $dom3 = new DOMDocument();
    @$dom3->loadHTMLFile('http://www.auto-types.com' . $item->textContent);
    $xpath3 = new DOMXpath($dom3);   
    $konacno = array();
    $krajs = $xpath3->query("//div/@onclick");
        foreach ($krajs as $kraj) {
            $konacno[] = $kraj->textContent;
        }
  }

  $data['newLinks'] = implode(', ', $konacno);

  $output[] = $data;
}

echo '<pre>' . print_r($output, true) . '</pre>';

?>

您最好使用某种持久队列来完成这项工作。这可能是一个数据库表,甚至是一个文本文件(记住在这里锁定)

每当您需要请求一个新页面时,将请求放入队列中。如果发现任何数据,请将其存储。完成后,从队列中获取下一个作业。为了确保不超过脚本执行时间限制,您可以在浏览器中进行转发(如果您没有机会再运行更长的作业)


你甚至可以同时运行多个工作人员来抓取该页面

脚本执行时间为20分钟,然后我得到一个500 INTERNA服务器错误哪个服务器给出了内部错误?运行脚本的那个,还是从中提取数据的那个?如果是您的服务器,请检查错误日志。关于500的详细信息会在那里。你能在JSFIDLE上给我看一下吗。。。谢谢!如何在从页面获取数据并释放服务器内存时显示数据…如果您需要有人做您的工作,请雇用他。所以这不是为了完成你的工作,而是为了范围有限的问题。完整的代码将远远超出。