PHP实现简单爬虫的方法


Posted in PHP onJuly 29, 2015

本文实例讲述了PHP实现简单爬虫的方法。分享给大家供大家参考。具体如下:

<?php
/**
 * 爬虫程序 -- 原型
 *
 * 从给定的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();
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP脚本数据库功能详解(中)
Oct 09 PHP
phpcms模块开发之swfupload的使用介绍
Apr 28 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
php cli配置文件问题分析
Oct 15 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
CI框架整合widget(页面格局)的方法
May 17 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
php获取网站百度快照日期的方法
Jul 29 #PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 #PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 #PHP
PHP模拟QQ登录的方法
Jul 29 #PHP
PHP实现动态web服务器方法
Jul 29 #PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 #PHP
php简单防盗链实现方法
Jul 29 #PHP
You might like
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python自动点赞功能的实现思路
2020/02/26 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
Python调用C/C++的方法解析
2020/08/05 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
世界上最全面的草药补充剂和顶级品牌维生素网站:HerbsPro
2019/01/20 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
实习推荐信
2014/05/10 职场文书
假期安全教育广播稿
2014/10/04 职场文书
2014年话务员工作总结
2014/11/19 职场文书
万能检讨书
2015/01/27 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
Win11查看设备管理器
2022/04/19 数码科技