Java实现的一个小说采集程序

被标题吸引进来的不要骂我。

只是一个简单的实现,随手写了来下载一部喜欢的小说的。示例中的小说只是示例,不是我的菜。

使用了jsoup。挺好用的一个工具。

有需要的话,参考下自己改吧。挺简单的,是吧。

代码如下:

package com.zhyea.doggie;



import java.io.File;

import java.io.FileWriter;

import java.io.IOException;



import org.jsoup.Jsoup;

import org.jsoup.nodes.Document; 

import org.jsoup.select.Elements;



public class Doggie {



    public static void main(String[] args){

        try{

            File txtFile = new File("D:/无限崩坏.txt");

            createTxtDoc(txtFile); 

            addContent(txtFile);

        }catch(Exception e){

            e.printStackTrace();

        }

            

    }

    

    /**

     * 向小说文件中添加内容

     * @param txtFile

     *             小说文件

     * @throws IOException

     * @throws InterruptedException

     */

    private static void addContent(File txtFile) throws IOException, InterruptedException{

        appendTxt(txtFile, getBookInfo("无限崩坏", "啪啪啪狂魔"));

        String url = "http://www.83kxs.com/View/12/12653/{pattern}.html";

        for(int i=5850686; i<=5945501; i++){

            try{

                String tmp = url.replace("{pattern}", i+"");

                appendTxt(txtFile, getPageContent(tmp));

            }catch(Exception e){

                e.printStackTrace();

                continue;

            }

        }

    }

        

    /**

     * 设置书名和作者

     * @param bookName

     *                 书名

     * @param author

     *                 作者

     * @return

     */

    private static String getBookInfo(String bookName, String author){

        return COMMON.replace("{book}", bookName).replace("{author}", author);

    }    

    

    /**

     * 读取页面内容

     * @param url

     *            访问路径             

     * @return

     * @throws IOException 

     */

    private static String getPageContent(String url) throws IOException{

        String rtn = null;

        

        Document doc = Jsoup.connect(url).get();

        Elements content = doc.select(".text p");

        Elements title = doc.select("#title");

        

        System.out.println(title.text());

        

        content.select("font").remove();

        content.select("script").remove();

        content.select("ins").remove();

        content.select("a").remove();

            

        rtn = title.text() + NEWLINE 

            + content.html().replaceAll("<p>", "")

                            .replaceAll("</p>", "")

                            .replaceAll("\\<!--(.+)--\\>", "")

                            .replaceAll("&nbsp;", "")

                            .replaceAll("<br>", NEWLINE)

            + NEWLINE;

        

        return rtn;

    }

    

    /**

     * 创建新的txt文件

     * @param fullName

     *             文件全名

     * @return

     * @throws Exception

     */

    private static boolean createTxtDoc(File txtFile) throws Exception{

        try{

            return txtFile.createNewFile();

        }catch(Exception e){

            throw e;

        }

    }

    

    

    /**

     * 向txt文件中追加内容

     * @param txtFile

     *             要操作的txt文件

     * @param content

     *             要追加的内容

     * @throws IOException

     */

    private static void appendTxt(File txtFile, String content) throws IOException{

        FileWriter writer = null;

        try{

            writer = new FileWriter(txtFile, true);

            writer.append(content);

        }finally{

            if(null!=writer)writer.close();

        }

    }

    

    /**

     * 换行符

     */

    static final String NEWLINE = System.getProperty("line.separator");

    

    /**

     * 书前的通用信息

     */

    static String COMMON = "------------------------------------------------------------------" + NEWLINE

                                + "---------------  书名:{book}" + NEWLINE

                                + "---------------  作者:{author}" + NEWLINE

                                + "---------------  zhyea.com" + NEWLINE

                                + "------------------------------------------------------------------" + NEWLINE;

    

}

你可能感兴趣的:(java实现)