0

在这里,我有一些脚本,但是 3 个 foreach 函数太长了,并且出现了内部服务器错误。我可以用 curl 或类似的东西解决这个问题吗?

这是代码:

<?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>';

?>
4

1 回答 1

0

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

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

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

于 2013-01-25T17:02:53.087 回答