zoukankan      html  css  js  c++  java
  • PHP爬虫

    目标:利用PHP解决网站列表内容抓取

    描述:在群里看到小伙伴问到关于抓取网站列表内容,我就想起了当时工作关于文章采集的问题,但是后面想想又不对,这是列表抓取,于是就想起了大神们经常说的说的“爬虫”,我想一定可以解决小伙伴的问题,因为是php小白,所以在网上找了很多爬虫的写法,但是太长了不想看,受网友帖子启发看到了fopen()方法,那么这个方法是干嘛的?

    fopen() 定义:"把指定文件或者url资源绑定到资源上";注释

    额 好像不错,在查找的相关用法时,看到stream_get_contents()方法,那么这个方法具体有什么作用呢?

    stream_get_contents() 定义: "把资源流转化成字符串";注释

    这下明白,利用他们就可以解决页面抓取了。

    代码:

    <?php
    define("URL", "http://www.zcy.gov.cn/search?shopId=6&pageNo=");
    $start_time = microtime(true);
    $array = Array();
    echo '<ul class="view-mode-thumb">';
    for($index = 1; $index <= 5; $index++){
        $url = URL.$index;
        $fp = fopen($url, 'r');
        $all_Str = stream_get_contents($fp, -1, -1);
        // $len = strlen($all_Str);
        $preg ='/<li class="products*w*" style="s*w*s*">.*?</li>/s';
        $int = @preg_match_all($preg, $all_Str, $arr);
        $array = array_merge($array, $arr[0]);
    }
    
    foreach ($array as $key => $value) {
        # code...
        echo $value;
    }
    
    echo '</ul>';
    $end_time = microtime(true);
    echo "<script>console.log('文件数目:".count($array)."  耗用时间:".($end_time-$start_time)."s')</script>";
    // fpassthru($fp);
    fclose($fp);
    
    exit();
    ?>

    效果图:

    说明:不知道是自己能力问题还是其他原因,PHP爬虫的抓取页面效率不是很高,测试500个链接10000个数据耗时接近10分钟,最后本人还是菜鸟,写法上可能不是很完善,望见谅!

  • 相关阅读:
    SSRS Fields cannot be used in page headers or footers
    mac os x 触摸板点击无效
    Android内核sysfs中switch类使用实例
    hdu1827之强联通
    解决Gradle执行命令时报Could not determine the dependencies of task &#39;:compileReleaseJava&#39;.
    我对Lamport Logical Clock的理解
    側滑删除进阶(七、八)
    管理之路(成长之路--五)
    Qt跨平台的一个例程
    IOS 开发推荐经常使用lib
  • 原文地址:https://www.cnblogs.com/dream-w/p/6520435.html
Copyright © 2011-2022 走看看