免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1260 | 回复: 0
打印 上一主题 下一主题

(1)选取url入口------如何设计一个简洁的web抓取引擎 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-24 23:15 |只看该作者 |倒序浏览
要想抓取一个整站资源,首先必须要清楚的一点就是:你需要知道从哪一个入口,可以获得所有的资源路径。也就是说,你需要一个类似sitemap的东西来遍历所有站点资源。
好,就事论事,把我的爬虫放出去,要给他一个入口url。分析这个网站,从哪里可以得到这么一个url呢?
无独有偶,我想得到的是所有的谱子,而这个站长搞了一个分类,就是按照所有谱子歌手的字母进行了排序,因此,这个排序理论上是能够遍历全站的。
于是,第一步的程序是这么写的:(开发语言么随便,当然我要祭出我的宝物java)

    /*
     * get the 1st url (classed by a,b,c,d...)
     * */
    public static int get_1stURL(String url,File S_file){
        try{
             //String ur="http://www.target.com/listArtist.aspx?path=a"; //获取远程网上的信息
            URL MyURL=new URL(url);
            String str;
            URLConnection con=MyURL.openConnection();
            InputStreamReader ins=new InputStreamReader(con.getInputStream());
            BufferedReader in=new BufferedReader(ins);
            StringBuffer sb = new StringBuffer();
            while ((str=in.readLine())!=null)
            {
                sb.append(str);
            }
            in.close();
            
            Pattern p = Pattern.compile("(.*?)");
            Matcher m = p.matcher(sb.toString());
            BufferedWriter rw = new BufferedWriter(new FileWriter(S_file,true));
            int i = 0;
            while(m.find())
            {
                rw.write(index+"\n");
                rw.write(m.group(2).trim()+"\n");
                rw.write(m.group(1).trim()+"\n");
                i++;
                index++;
            }
            rw.close();
            return i;
        }
        catch (MalformedURLException mfURLe) {
            System.out.println("MalformedURLException: " + mfURLe);
            return -1;
        }
        catch (IOException ioe) {
            System.out.println("IOException: " + ioe);
            return -1;
             }
    }

}
具体我不详细说了,我说一下这个函数的大意:
1)首先获得入口url,如:
http://www.target.com/listArtist.aspx?path=a
, 假设这个是子母a的第一级链接;
2)读取这个url的所有内容到一个buffer里面去;
3)使用正则表达式分析这个buffer,过滤出第一季页面里面的歌手列表和二级url,并存在一个文件里面;
第一步工作就完成了,很简单吧?哈哈··记住,找到一个好的入口,就是成功了1半了。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/68043/showart_1220684.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP