美文网首页
别人写的简单的爬取url的爬虫样例

别人写的简单的爬取url的爬虫样例

作者: Tangbh | 来源:发表于2017-03-13 13:19 被阅读72次

    ```

    /**

    * 爬虫程序 -- 原型

    *

    * BookMoth 2009-02-21

    */

    /**

    * 从给定的url获取html内容

    *

    * @param string $url

    * @return string

    */

    function _getUrlContent($url){

    $handle = fopen($url, "r");

    if($handle){

    $content = stream_get_contents($handle,1024*1024);

    return $content;

    }else{

    return false;

    }

    }

    /**

    * 从html内容中筛选链接

    *

    * @param string $web_content

    * @return array

    */

    function _filterUrl($web_content){

    $reg_tag_a = '/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/';

    $result = preg_match_all($reg_tag_a,$web_content,$match_result);

    if($result){

    return $match_result[1];

    }

    }

    /**

    * 修正相对路径

    *

    * @param string $base_url

    * @param array $url_list

    * @return array

    */

    function _reviseUrl($base_url,$url_list){

    $url_info = parse_url($base_url);

    $base_url = $url_info["scheme"].'://';

    if($url_info["user"]&&$url_info["pass"]){

    $base_url .= $url_info["user"].":".$url_info["pass"]."@";

    }

    $base_url .= $url_info["host"];

    if($url_info["port"]){

    $base_url .= ":".$url_info["port"];

    }

    $base_url .= $url_info["path"];

    print_r($base_url);

    if(is_array($url_list)){

    foreach ($url_list as $url_item) {

    if(preg_match('/^http/',$url_item)){

    //已经是完整的url

    $result[] = $url_item;

    }else {

    //不完整的url

    $real_url = $base_url.'/'.$url_item;

    $result[] = $real_url;

    }

    }

    return $result;

    }else {

    return;

    }

    }

    /**

    * 爬虫

    *

    * @param string $url

    * @return array

    */

    function crawler($url){

    $content = _getUrlContent($url);

    if($content){

    $url_list = _reviseUrl($url,_filterUrl($content));

    if($url_list){

    return $url_list;

    }else {

    return ;

    }

    }else{

    return ;

    }

    }

    /**

    * 测试用主程序

    *

    */

    function main(){

    $current_url = "http://hao123.com/";//初始url

    $fp_puts = fopen("url.txt","ab");//记录url列表

    $fp_gets = fopen("url.txt","r");//保存url列表

    do{

    $result_url_arr = crawler($current_url);

    if($result_url_arr){

    foreach ($result_url_arr as $url) {

    fputs($fp_puts,$url."\r\n");

    }

    }

    }while ($current_url = fgets($fp_gets,1024));//不断获得url

    }

    main();

    ?>

    ```

    相关文章

      网友评论

          本文标题:别人写的简单的爬取url的爬虫样例

          本文链接:https://www.haomeiwen.com/subject/gvbfnttx.html