| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1441 人关注过本帖
标题:Java小菜鸟虚心求教 关于网络爬虫
只看楼主 加入收藏
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
Java小菜鸟虚心求教 关于网络爬虫
    老师让编一个爬虫  编得我意识都模糊了 可是最后就是差一点
    刚不住了  求各位大神指点迷津
    这是主程序:
程序代码:
import import java.util.Set;

public class MyCrawler {
   
    public static void main(String args[]) throws IOException{
       
           
        LinkQueue.addUnvisitedUrl("http://www.baidu.com");
        //循环条件:待抓取的链接不空且抓取的网页不多于100
        while(!LinkQueue.unVisitedUrlsEmpty()
                &&LinkQueue.getVisitedUrlNum()<=100){
            //队头URL出队列
            String visitUrl = (String) LinkQueue.unVisitedUrlDeQueue();
            if(visitUrl==null){
                continue;
            }
            DownPage downpage = new DownPage();
            //下载网页
            String filePath = downpage.downpage(visitUrl);
            //该URL放入已访问的URL中
            LinkQueue.addVisitedUrl(visitUrl);
            //提取出下载网页中的URL
            Set<String> links = collectUrl.collect(filePath);
            //新的未访问的URL入队
            for(String link:links){
                LinkQueue.addUnvisitedUrl(link);
            }
               
        }
    }
   
}

表单我是参照其他书上写的
程序代码:
import java.util.LinkedList;

/**

 * 队列,保存将要访问的URL

 */
public class Queue {
    //使用链表实现队列
    private LinkedList<Object> queue = new LinkedList<Object>();
    //入队列
    public void enQueue(Object t){
        queue.addLast(t);
    }
    //出队列
    public Object deQueue(){
        return queue.removeFirst();
    }
    //判断队列是否为空
    public boolean isQueueEmpty(){
        return queue.isEmpty();
    }
    //判断队列是否包含t
    public boolean contains(Object t){
        return queue.contains(t);
    }
    public boolean empty(){
        return queue.isEmpty();
    }
   
}    import java.util.*;

public class LinkQueue {
   
    //已访问的URL集合
    private static Set<String> visitedUrl = new HashSet<String>();
    //待访问的URL集合
    private static Queue unVisitedUrl = new Queue();
    //获得URL队列
    public static Queue getUnVisitedUrl(){
        return unVisitedUrl;
    }
    //添加到访问过的URL队列中
    public static void addVisitedUrl(String url){
        visitedUrl.add(url);
    }
    //移除访问过的URL
    public static void removeVisitedUrl(String url){
        visitedUrl.remove(url);
    }
    //未访问的URL出队列
    public static Object unVisitedUrlDeQueue(){
        return unVisitedUrl.deQueue();
    }
    //保证每个URL只能被访问一次
    public static void addUnvisitedUrl(String url){
        if(url!=null&&url.trim().equals("")
                &&!visitedUrl.contains(url)
                &&!unVisitedUrl.contains(url))
            unVisitedUrl.enQueue(url);
    }
    //获得已经访问的URL数目
    public static int getVisitedUrlNum(){
        return visitedUrl.size();
    }
    //判断未访问的URL队列中是否为空
    public static boolean unVisitedUrlsEmpty(){
        return unVisitedUrl.empty();
    }
   
}

 我觉得应该没什么问题了  可是 运行之后什么都没有
求各位大神行行好救救我把  
我已经在这卡了好多天了 再这样下去要疯了
搜索更多相关主题的帖子: 主程序 Java 网络 小菜 
2013-08-26 16:17
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:5 
debug试试再说。看运行到哪,哪里该有值的没有值

学海无涯#¥%……&*(
2013-08-26 17:14
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 2楼 java小蚂蚁
主要是第一个网址 就是百度主页那个出了问题  我试了试
add进去后直接输出  但是什么都输出不出来
 可是没显示任何问题  请问这是怎么了
2013-08-26 18:05
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 2楼 java小蚂蚁
主要是第一个网址 就是百度主页那个出了问题  我试了试
add进去后直接输出  但是什么都输出不出来
可是没显示任何问题  请问这是怎么了
2013-08-26 20:53
java小蚂蚁
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:上海
等 级:贵宾
威 望:18
帖 子:558
专家分:2186
注 册:2013-7-2
收藏
得分:0 
没做过这方面的

学海无涯#¥%……&*(
2013-08-27 09:29
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 5楼 java小蚂蚁
好吧
老师真心给我出了个难题哇。。
2013-08-27 16:14
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
收藏
得分:15 
程序代码:
class LinkQueue  修改

private static Queue unVisitedUrl ;
   

    public static void setq(Queue q){
        unVisitedUrl=q;
    }

main  修改
Queue q= new Queue();

 q.enQueue("http://www.baidu.com");

 LinkQueue.setq(q);

 System.out.println(LinkQueue.getUnVisitedUrl().isQueueEmpty());

2013-08-27 18:19
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 7楼 hhwz
谢谢楼主大神
试过代码了 可以解决
我想请教一下 为什么要这样改
我的表单哪里写错了
指出来让我进步吧
谢谢大神
2013-08-27 18:53
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 7楼 hhwz
我稍微看懂了一点
是把那个地址加到了Queue的对象去
为什么LinkQueue不行呢
2013-08-27 19:00
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
收藏
得分:0 
这个不是单例模式的 可能 是每次使用时都new了一个新的 所以一直是空的
2013-08-27 19:57
快速回复:Java小菜鸟虚心求教 关于网络爬虫
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021728 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved