目标:利用PHP解决网站列表内容抓取php
描述:在群里看到小伙伴问到关于抓取网站列表内容,我就想起了当时工做关于文章采集的问题,可是后面想一想又不对,这是列表抓取,因而就想起了大神们常常说的说的“爬虫”,我想必定能够解决小伙伴的问题,由于是php小白,因此在网上找了不少爬虫的写法,可是太长了不想看,受网友帖子启发看到了fopen()方法,那么这个方法是干吗的?测试
fopen() 定义:"把指定文件或者url资源绑定到资源流上";注释网站
额 好像不错,在查找流的相关用法时,看到stream_get_contents()方法,那么这个方法具体有什么做用呢?url
stream_get_contents() 定义: "把资源流转化成字符串";注释spa
这下明白,利用他们就能够解决页面抓取了。.net
代码:code
<?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="product\s*\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(); ?>
效果图:blog
说明:不知道是本身能力问题仍是其余缘由,PHP爬虫的抓取页面效率不是很高,测试500个连接10000个数据耗时接近10分钟,最后本人仍是菜鸟,写法上可能不是很完善,望见谅!ip