我构建了一个简单的网络爬虫,它在<body>
. 它做得很好,唯一的问题是它没有跟随页面上的链接转到它递归爬取的其他页面。
在输出中,我只看到手动启动爬虫的页面内容,没有迹象表明它正在跟踪链接。
我怎样才能让它跟随链接、爬取这些页面并回显它们的内容?
这是代码:
<?php
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;
}
$content = stristr($content, "<body>");
preg_match_all( '/http:\/\/[^ "\']+/', $content, $matches );
// do something with content.
echo strip_tags($content);
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 );
}
}
}
crawl('http://the-irf.com/hello/hello6.html');
?>
更新:我假设正则表达式( /http://[^ "\']+/ )有问题。如何实现一个遵循所有锚点的所有 href 的正则表达式,无论它们以
http://
http:/www.
www.
https://
https://www.
或其他任何东西(例如像 index.html 这样的绝对文件路径)?或者有没有更好的方法来做这个正则表达式?