2013-03-10 100 views
0

我已经开始学习关于网络爬虫的知识,并借助于我在下面构建这个简单的文章的帮助。使用多线程来改进网络爬虫/蜘蛛

它建议使用多线程来改进和使网络爬虫更快。

我想知道是否有人可以帮助我了解有关多线程的更多信息,甚至可能将其应用于下面的抓取工具。

此外,如果您有任何其他建议或改进来改进此爬虫,请随时分享。

下面是代码:

error_reporting(E_ERROR); 

define("CRAWL_LIMIT_PER_DOMAIN", 50); 

$domains = array(); 

$urls = array(); 

function crawl($url) 
{ 
    global $domains, $urls; 
    $parse = parse_url($url); 
    $domains[ $parse['host'] ]++; 
    $urls[] = $url; 

    $content = file_get_contents($url); 
    if ($content === FALSE) 
     return; 
    else { 
     // do something with content. 
    } 

    $content = stristr($content, "body"); 
    preg_match_all('/http:\/\/[^ "\']+/', $content, $matches); 

    foreach($matches[0] as $crawled_url) { 
     $parse = parse_url($crawled_url); 
     if (count($domains[ $parse['host'] ]) < CRAWL_LIMIT_PER_DOMAIN && !in_array($crawled_url, $urls)) { 
      sleep(1); 
      crawl($crawled_url); 
     } 
    } 
} 

感谢您在高级 - 我想感谢所有和任何帮助。

回答

2

幸运的是,PHP不支持多线程。你可以做的是实现异步模式,但这意味着你必须忘记漂亮的一行功能,如file_get_contents,并切换到最低级别的页面读取(使用fsockopen,然后在非阻塞模式下手动执行所有写入和读取操作,其他人在工作时需要等待),请参阅示例代码here

+0

啊,好的。感谢您的解释和帮助! – IMUXIxD 2013-03-10 06:13:59