`
chenlong_1988
  • 浏览: 185476 次
  • 性别: Icon_minigender_2
社区版块
存档分类

【转】通过搜索关键和页码字进入百度

 
阅读更多

 
通过搜索关键和页码字进入百度,例如“http://www.baidu.com/s?wd=搜索关键字&pn=页码(这里的页码计算公式是:10*(页码-1))
找到真正有用的那一行,把信息读出来,
按照每一个项的特点把他们切开,例如URL前面都有“class=f”……
然后存起来
下面是代码:
 
package org.qisou;
 
import java.io.*;
import java.net.*;
/*
 * 这是一个获取百度的类,它可以用一个搜索关键字来初始化,然后将抓取的结果存到SearchItem的对象数组里
 */
public class CatchBaidu {
 
    /**
     * @param args
     * strKey: 搜索关键字
     */
    private String strKey;
    private String[] info;
    private String source;
    private SearchItem[] ItemList;
     
    /*
     * 构造函数,使用搜索关键字构造
     */
    public CatchBaidu(String strKey,int pages){
        this.strKey=strKey;
        pages=(pages-1)*10;
        this.ItemList = new SearchItem[10];
        this.source="http://www.baidu.com/s?wd="+this.strKey+"&tn=cfish828_pg&pn="+pages;
        this.source=Socket(this.source);
        info = new String[40];
        this.GetBaidu();
    }
    public CatchBaidu(String strKey){
        this.strKey=strKey;
        this.ItemList = new SearchItem[10];
        this.source="http://www.baidu.com/s?wd="+this.strKey+"&tn=cfish828_pg&pn="+1;
        this.source=Socket(this.source);
        info = new String[40];
        this.GetBaidu();
    }
    /*
     * 使用socket获取制定baidu页面,并对页面进行初级筛选,找出有用的一行返回
     */
    public String Socket(String strPage){
         
        String strServer="www.baidu.com";
        String s=null;
        try {
            String hostname = strServer;
            int port = 80;
            InetAddress addr = InetAddress.getByName(hostname);
            Socket socket = new Socket(addr, port); //建立一个Socket
 
            //发送命令
            BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8"));
            wr.write("GET " + strPage + " HTTP/1.0 ");
            wr.write("HOST:" + strServer + " ");
            wr.write(" ");
            wr.flush();
 
            //接收返回的结果
            BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line;
            while (true) {
                line = rd.readLine();
                if(line.length()>=75){
                    if(line.startsWith("<table border="0" cellpadding="0" cellspacing="0"><tr><td class=f><a href="")){
                        s=line;
                        break;
                    }
                }
            }
            wr.close();
            rd.close();
        
        catch (Exception e) {
            System.out.println(e.toString());
        }
        return s;
    }//获取百度有用的字段;
         
    public String ClearOnce(String s){
        int first;
        int last;
        first = s.indexOf("<");
        last = s.indexOf(">");
        StringBuilder builder = new StringBuilder(s);
        builder.delete(first,last+1);
        return builder.toString();
    }//清除一次<>
     
    public String Clear(String s){
        while(s.indexOf(">")>0&s.indexOf(">")<s.length()){
            s=this.ClearOnce(s);
        }
        return s;
    }//清除所有的<>
     
    public String ClearK(String s){
        return s.substring(0,s.indexOf("- "));
    }//去掉百度快照
     
    public String GetUrl(String s){
        int first;
        int lest;
        if((first=s.indexOf("class=f"))!=-1){
            lest=s.indexOf("" target");
            s=s.substring(first+17,lest);
            return s;
        }else
        return "";
    }//获取URL
     
    public void GetBaidu(){
        int br;
        for(int i=0;i<40;i++){
            br=this.source.indexOf("");
            info[i]=this.source.substring(0,br);
            this.source=this.source.substring(br+4,this.source.length());
        }//将数据进行分段,每四段代表一个信息
        for(int i=0;i<40;i++){
            if((i+1)%4==1){
                info[i+3]=GetUrl(info[i]);
            }
            info[i]=Clear(info[i]);
            if((i+1)%4==3){
                info[i]=ClearK(info[i]);
            }
            //System.out.println(st[i]);
        }//将信息整理,从新存储,顺序为 标题、简介、页面信息、URL
        for(int i=0;i<10;i++){
            int j=i*4;
            SearchItem item = new SearchItem(info[j],info[j+3],info[j+1],info[j+2]);
            this.ItemList[i]=item;
        }//将每条信息存入对象数组
    }//把信息分段存入数组
     
    public SearchItem[] GetBaiduItemList(){
        return ItemList;
    }
 
    public static void main(String[] args){
        //System.out.print("QiSou.cn Search: ");
        //KeyboardInput input = new KeyboardInput();
        //String search = input.readString();
        CatchBaidu obj = new CatchBaidu("forest",4);
        SearchItem[] itemlist = obj.GetBaiduItemList();
        for(int i=0;i<10;i++){
            itemlist[i].print();
        }
    }
 
}
 
.
 
package org.qisou;
 
public class SearchItem {
 
    /**
     * @param args
     * title: 标题
     * URL:链接地址
     * synopsis:简介
     * info:页面信息
     */
    //private String ID;
    private String title;
    private String URL;
    private String synopsis;
    private String info;
     
    public String GetTitle(){
        return title;
    }
    public String GetURL(){
        return URL;
    }
    public String GetSynopsis(){
        return synopsis;
    }
    public String GetInfo(){
        return info;
    }
 
     
    public SearchItem(String title ,String URL ,String synopsis ,String info){
        this.title=title;
        this.URL=URL;
        this.synopsis=synopsis;
        this.info=info;
    }
    public SearchItem(){
         
    }
     
    public void print(){
        System.out.println(this.GetURL());
        System.out.println(this.GetTitle());
        System.out.println(this.GetSynopsis());
        System.out.println(this.GetInfo());
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SearchItem obj = new SearchItem("title","URL","synopsis","info");
        obj.print();
 
    }
 
}
分享到:
评论

相关推荐

    准正交码字搜索

    准正交码字搜索在无线通信领域中是一个关键的技术,特别是在多小区环境下,为了实现高效、准确的信道估计和信息传输。准正交码字(Quasi-Orthogonal Sequence)是一种特殊的序列设计,它在一定程度上实现了码字间的...

    大神码字强制码字软件

    总的来说,大神码字软件通过集成多文档编辑和强大的随机起名工具,为文学创作者提供了一个高效、便捷的创作环境。配合其内部组件,软件能够无缝对接Word,确保文档兼容性和编辑质量。对于那些在创作过程中需要大量...

    小黑屋码字软件

    "小黑屋码字软件"是一款专为写作爱好者和专业作者设计的应用,旨在提升写作效率,帮助用户专注于创作,避免因各种干扰因素导致的效率低下。这款软件的主要特点包括防止偷懒、防止分心、防止游戏以及其他可能分散注意...

    大神码字及注册机

    标题中的“大神码字及注册机”表明我们讨论的是一个专为网络小说作者设计的码字软件,可能包括其源代码以及一个注册机。这个软件的主要目标是帮助作者高效、安全地创作文字,尤其在网络小说领域。让我们深入探讨一下...

    码字大神强制码字软件V2.1

    最近更新:2013年4月1号,码字大神强制码字软件推出 V2.1 更新版本,主要更新如下: 重新设计编辑器,丰富编辑器功能,增加文字加粗、倾斜、加底色、改颜色及是否换行等等贴心功能。 重点修改了编辑器的保存模式...

    pdf417条码参考及码字表

    码字表是PDF417条码编码的关键,它定义了字符与二进制码字的对应关系。每个字符由5个条和5个空组成,共10个模块,这10个模块被分为两组,每组5个,称为左侧码字和右侧码字。左侧码字对应数据的高四位,右侧码字对应...

    小黑屋强制码字软件,码字必备

    "小黑屋强制码字软件"是一款专为写作爱好者和专业作者设计的高效码字工具,旨在提供一个无干扰、高效率的创作环境。这款软件以其独特的功能和人性化的设计赢得了广泛的赞誉,尤其对于那些需要长时间专注写作的用户,...

    ps2键盘—码字接收

    在这个“ps2键盘—码字接收”的项目中,我们将探讨如何在Quartus 7.2这个硬件描述语言(HDL)开发环境中,使用Verilog语言实现一个PS/2键盘的码字接收和转换为ASCII码的程序。 首先,我们需要理解PS/2接口的工作...

    大神码字软件v9.4官方免费安装版

    大神码字软件是一款优秀的国产写作码字软件,拥有全面的文本编辑和写作辅助功能,包括完善的文稿保存方案、卓越的虚拟分卷模式、多彩的界面,支持锁定开关功能,并且与同类国外码字软件相比,对中文的支持更好,需要...

    超级码字V1.1.1绿色免费版

    超级码字是一款便携式的码字工具,软件适合网络作家使用,软件具有Word式的码字模式,拥有自动保存、手动保存、以及自动备份、定时备份、回车备份和胶囊备份、云ftp服务器备份、本地FTP服务器备份等功能,需要的朋友...

    三毛强制码字软件v2.0绿色免费版

    文字工作者们有的是拖延症患者,软件能给你外界压力固然能起到提醒和一定的约束作用,时间管理仍应基于对心态和工作方式的调整。运用软件的特定功能来改善某些行为、提高工作效率,确实是可能的,也值得鼓励。 三毛...

    码字md干净精致的Markdown编辑器

    Markdown 编辑器是程序员和内容创作者们喜爱的工具,因其简洁、高效的语法而备受推崇。"码字 md" 正是一款专为用户提供干净、精致体验的 Markdown 编辑器,旨在让撰写文档变得更加轻松愉快。这款编辑器采用 ...

    三毛强制码字软件 v2.0.zip

    而软件的真正亮点在于“时间锁”和“催稿锁”,即在运行软件时先设定锁定的时间或者字数,在达到已设定的时间或字数之前,用户无法退出这款软件,也无法打开网页、运行游戏,甚至不能强制关机,再资深的 “拖延症...

    郑码字根表

    非常好用的郑码字根表,你试试看就知道了。其他的郑码资源有机会再上传。

    码字练习器,练习码字,码字速度

    通过"码字练习器",用户可以在日常使用中不断锻炼和提升打字技巧,从而提高工作效率。而"Typing.py"作为其核心代码,是实现这些功能的关键所在。理解并分析这个Python文件,有助于我们深入学习Python编程,特别是GUI...

    小黑屋码字

    小黑屋码字

    神笔马良强制码字软件2.0版-神笔马良软件唯一正版-进小黑屋写文字

    所以系统设置了阅览模式和分卷模式的转换,您可以随时进入阅览模式,您也可以随时进入编辑模式。  当然进入阅览模式时,为了系统的轻便,您是不能编辑的。 一键排版  只按一个键,便可以将您的文档整理成网络...

Global site tag (gtag.js) - Google Analytics