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基础教程 php内置函数实例教程
Aug 21 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
浅谈PHP错误类型及屏蔽方法
May 27 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
js 操作符实例代码
2009/10/24 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
深入理解ECMAScript的几个关键语句
2016/06/01 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python实现手机销售管理系统
2019/03/19 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python自动化办公操作PPT的实现
2021/02/05 Python
C#公司笔试题
2014/03/28 面试题
剪枝的学问教学反思
2014/02/07 职场文书
工作表现自我评价
2014/02/08 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
网页美工求职信范文
2014/04/17 职场文书
爱祖国演讲稿
2014/05/04 职场文书
材料化学专业求职信
2014/07/15 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
鸟的天堂导游词
2015/01/31 职场文书
中学社团活动总结
2015/05/07 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
美丽的大脚观后感
2015/06/03 职场文书