Java爬虫框架 | 爬小说

Posted 杨超杰的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java爬虫框架 | 爬小说相关的知识,希望对你有一定的参考价值。

Jsoup,Java爬虫解决方案,中文文档:jsoup

  不得不说Java的生态真的好,原来我以为爬虫是只能用Pyhton来写的,结果发现Java的爬虫框架不要太多……
 
 
   

  不过个人觉得Jsoup最好用,最直接也很简单

  写了一个Demo,爬取笔趣网的小说,格式已过滤。

 

public class CrawlText {

    /***
     * 获取文本
     * 
     * @param autoDownloadFile
     *            自动下载文件
     * @param Multithreading
     *            多线程 默认false
     * @param Url
     *            网站链接
     * @throws IOException
     */
    public static void getText(boolean autoDownloadFile, boolean Multithreading, String Url) throws IOException {

        
        String rule = "abs:href";
        
        

        
        List<String> urlList = new ArrayList<String>();

            
        Document document = Jsoup.connect(Url)
                .timeout(4000)
                .ignoreContentType(true)
                .userAgent("Mozilla" to "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0)")
                .get();
        
        System.out.println(document.toString());
        Elements urlNode = document.select("a[href$=.html]");
        
        for (Element element : urlNode) {
            urlList.add(element.attr(rule));
        }
        
        CrawTextThread crawTextThread = new CrawTextThread(urlList);
        crawTextThread.start();

        
    }

}

 

 

package xyz.yangchaojie.JSOUP.service;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class CrawTextThread extends Thread {

    List<String> UrlList;

    public CrawTextThread(List<String> urlList) {
        this.UrlList = urlList;
    }

    String rule = "";
    String rule_title = "h1";
    String rule_content = "content";
    
    public static String PATH = "D:\JSOUP\";

    /**
     * 创建文件
     * 
     * @param fileName
     * @return
     */
    public static void createFile(File fileName) throws Exception {
        try {
            if (!fileName.exists()) {
                fileName.createNewFile();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
    }

    public static void writeTxtFile(String content, File fileName) throws Exception {
        RandomAccessFile mm = null;
        FileOutputStream o = null;
        try {
            o = new FileOutputStream(fileName);
            o.write(content.getBytes("UTF-8"));
            o.close();
        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            if (mm != null) {
                mm.close();
            }
        }
    }

    @Override
    public void run() {
        currentThread().setName("一个都别跑:");
        
        String title;
        
        String content;
        
        for (String url : UrlList) {
                try {
                    
                    Document document = Jsoup.connect(url).timeout(6000).get();
                    title = document.select("h1").toString();
                    content = document.select("#content").html();
                    
                    System.out.println("线程:"+currentThread().getName()+"爬取URL—>"+url);
                    File file = new File(PATH+title.replaceAll("<h1>", "").replaceAll("</h1>", "")+".txt");
                    createFile(file);
                    System.out.println("创建文件:"+file.getPath());
                    writeTxtFile(FileterHtml(content), file);
                    
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }

    }
    
    public static String FileterHtml(String str) {
        return str.replaceAll(" ", "").replaceAll("<br>", "
");
        
    }
}

 

 

 

public static void main( String[] args )
    {
        try {
            CrawlText.getText(true, true, "http://www.biquge.com.tw/0_66/");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

 

 

RUN:

创建文件:D:JSOUP 关于新书的种种,在此一并交代.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83312.html
创建文件:D:JSOUP 第一章 失意相公.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83313.html
创建文件:D:JSOUP 第二章 吊颈秀才.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83314.html
创建文件:D:JSOUP 第三章 秦氏族叔.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83315.html
创建文件:D:JSOUP 第四章 无妄之灾.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83316.html
创建文件:D:JSOUP 第五章 游衙惊梦.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83317.html
创建文件:D:JSOUP 第六章 运蹇时乖.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83318.html
创建文件:D:JSOUP 第七章 白手起家(上).txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83319.html
创建文件:D:JSOUP 第八章 白手起家(下).txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83320.html
创建文件:D:JSOUP 第九章 江南才子.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83321.html
创建文件:D:JSOUP 第十章 才子招财.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83322.html
创建文件:D:JSOUP 第十一章 风靡江南.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83323.html
创建文件:D:JSOUP 第十二章 原形毕露.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83324.html
创建文件:D:JSOUP 第十三章 杜家危局.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83325.html
创建文件:D:JSOUP 第十四章 流年不利.txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83326.html
创建文件:D:JSOUP 第十五章 化解危局(上).txt
线程:一个都别跑:爬取URL—>http://www.biquge.com.tw/0_66/83327.html
创建文件:D:JSOUP 第十六章 化解危局(中).txt

 




以上是关于Java爬虫框架 | 爬小说的主要内容,如果未能解决你的问题,请参考以下文章

python 爬虫学习练习爬取电影小说

java爬虫,网页简易爬小说程序

Python爬虫之Scrapy框架系列(14)——实战ZH小说爬取多页爬取

Python爬虫爬取目标小说并保存到本地

Python爬虫之Scrapy框架系列(13)——实战ZH小说爬取数据入MySql数据库

Python爬虫之Scrapy框架系列(13)——实战ZH小说爬取数据入MySql数据库