简单的php爬虫程序
来源:互联网 发布:淘宝订单来不及发 编辑:程序博客网 时间:2024/05/04 08:25
- <?php
- /**
- * 爬虫程序 -- 原型
- *
- * 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();
- ?>
当然这只爬虫还需要进行下面的进化才可以:
1、拼接更准确的url链接。现在的链接有可能是格式错误的。
2、能够去掉重复的url链接。现在的爬虫会做非常多非常多的重复工作。
3、避免爬虫怕成环路,一个永远右转的车,只能是300内环,它只会跑在三环路上,去不了别的地方。
4、多线程或者多进程。因为php没有线程的概念,所以可能需要shell这样的东西来模拟了。
5、……略去2的N次方个汉字。
反正是意思一下就好了~
0 0
- 简单的php爬虫程序
- 简单的爬虫程序
- spider简单的爬虫程序
- 简单的java爬虫程序
- spider简单的爬虫程序
- 简单的java爬虫程序
- 简单的爬虫程序2
- 简单的Python爬虫程序
- 一个简单的爬虫程序
- 一个简单的爬虫程序
- python简单的爬虫程序
- PHP实现的一个简单的爬虫
- 利用php实现最简单的爬虫
- 一个PHP实现的轻量级简单爬虫
- 简单实用的php爬虫系统
- 一个PHP实现的轻量级简单爬虫
- 两个php写的爬虫程序
- 一个简单的Web爬虫程序
- POJ 1088 滑雪 (记忆化搜索)
- 从start_kernel到init
- Java 连接 mysql数据库
- 触摸屏驱动
- JavaCompiler 编译JAVA文件并指定输出路径
- 简单的php爬虫程序
- 回调接口的基本使用
- Qt css颜色对照表
- swift plist处理
- Java 类和接口概念
- JNI常用函数大全
- cxf生成webservice客户端代码
- 截屏实现,将UIView指定区域转换成图UIImage
- qemu,kvm,qemu-kvm,xen,libvir 区别