| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1441 人关注过本帖
标题:Java小菜鸟虚心求教 关于网络爬虫
取消只看楼主 加入收藏
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
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
奈落迷离
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
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 5楼 java小蚂蚁
好吧
老师真心给我出了个难题哇。。
2013-08-27 16:14
奈落迷离
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
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 10楼 hhwz
关于这个爬虫我可以把我编好的整个程序打包发给你吗
 还是有些地方不知道怎么了  
   求大神帮帮忙吧 我真的莫法了
2013-08-28 15:45
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 12楼 hhwz
好的
谢谢大神
crawler.rar (3 KB)
2013-08-28 21:29
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 12楼 hhwz
刚突然发现我在DownPage里都写了main语句
请你忽略吧 这是我这两天各种测试的残骸
我的主线程在MyCrawler里 先向表里写入第一个网页 然后进入循环 DownPage 抓取后把网页放入访问过的表里
然后把抓取到的内容传给collectUrl提取其中的地址后加入未访问的表
这是主要的思路
请你指点吧
2013-08-28 21:33
奈落迷离
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-8-26
收藏
得分:0 
回复 12楼 hhwz
大神 实在是不好意思
我这两天真心让它愁得快崩溃了
脑子都乱了
今天一天没碰 刚静心锊了一遍 解决了一些小麻烦
现在主要的问题是  
我在主线程抓取了里面的网页后
传什么东西给collectUrl比较好呢
原来我是直接传自己存在电脑上的TXT文件名字 然后collectUrl读取出来再用正则匹配 可是这样把数据流读了存了再在其他地方又读出来
我觉得很浪费资源
我原来想直接把读取的数据流定义成字符串 然后return给collectUrl 直接匹配   可是似乎不行

现在我就想知道  我到底传个什么东西给collectUrl才好用又不浪费资源呢
2013-08-28 22:02
快速回复:Java小菜鸟虚心求教 关于网络爬虫
数据加载中...
 
   



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

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