java 小说TXT下载(小说爬虫)

 implementation 'org.jsoup:jsoup:1.13.1'
package cy.main.mytest;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

import static org.junit.Assert.*;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
public class ExampleUnitTest {
    int m = 1;
    static boolean isRun = true;

    //  13000
    @Test
    public void addition_isCorrect() {
        createFile();
        try {
            while (isRun) {
                start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static String url = "http://www.ibiqu.org/book/123189/188178476.htm";

    public static void start() {
        parse(url);
    }

    private static void parse(String serverString) {
        System.out.println(serverString);
        // 可以使用Jsoup自带的网络请求方式:
        Document document = null;
        try {
            Connection conn = Jsoup.connect(serverString).timeout(10000);
            conn.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0");
            document = conn.get();
        } catch (Exception e) {
//            e.printStackTrace();
            System.err.println(e.getMessage());
        }
        // String string = document.toString();
        // System.out.println("document:" + string);

        // 解析xml
        // document = (Document) Jsoup.parse(serverString);
        if (document == null) {
            System.err.println("链接错误  正在重试。。。");
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            return;
        }

        Elements title = document.select("div");// 得到table标签中的内容
        for (Element item : title) {
            String name = item.attr("class");
            if (name.equals("bookname")) {
                Elements h1 = item.select("h1");
                String txt = "\r\n" + h1.text();
                getTxt(txt);
                System.out.println(txt);
            }
        }

        Elements div = document.select("div");// 得到table标签中的内容
        for (Element item : div) {
            // System.out.println("--------------------------");
            // System.out.println(item);

            String name = item.attr("id");
            if (name.equals("content")) {
                System.out.println(item.text().length());
                String[] line = item.text().split(" ");
                int n = line.length;
                for (int i = 0; i < n; i++) {
                    getTxt(line[i]);
                }
            }
        }

        Elements div1 = document.select("div");// 得到table标签中的内容
        for (Element item : div1) {
            String name = item.attr("class");
            if (name.equals("bottem2")) {

                Elements a = item.select("a");
                for (Element item1 : a) {
                    String name1 = item1.text();
                    if (name1.equals("下一章")) {
                        String href = item1.attr("href");
                        System.out.println(href);

                        if (!href.contains(".htm")) {
                            endTxt();
                            isRun = false;
                        } else {
                            url = "http://www.ibiqu.org" + href;
                            return;
                        }
                    }
                }
            }
        }
    }

    public static void getTxt(String msg) {
        String t = msg;
        Matcher matcher = Patterns.WEB_URL.matcher(msg);
        if (matcher.find()) {
            // System.out.println(matcher.group());
            t = t.replace(matcher.group(), "");
        }
        saveTxt(t + "\r\n");
    }

    public static void endTxt() {
        System.out.println("任务结束");
        try {
            writer.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    static BufferedWriter writer;

    public static void createFile() {
        File f = new File("D:\\txt\\2.txt");
        FileOutputStream writerStream = null;
        try {
            writerStream = new FileOutputStream(f, true);
            writer = new BufferedWriter(new OutputStreamWriter(writerStream, "UTF-8"));
        } catch (FileNotFoundException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    public static void saveTxt(String msg) {
        try {
//            System.out.println(msg);
            writer.write(msg);
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java爬虫是一种常用的网络数据抓取工具,用于获取网站上的信息并进行处理。学习Java爬虫,最好以视频教程为辅助,有系统的讲解和示例代码能更好地帮助理解和掌握相关知识。以下是关于Java爬虫入门到精通视频下载的相关建议。 网上有很多提供Java爬虫教程的平台,包括一些知名的在线学习网站、视频教育平台以及技术社区等。在这些平台上,你可以找到很多适合不同水平的视频教程,从入门到进阶都有涵盖。 首先,你可以在这些平台上搜索关键词"Java爬虫",然后在结果中筛选出类型为视频课程的内容。浏览不同课程的介绍、评价和课时等内容,选择适合自己的教程。评价好、内容丰富,并且有系统的教学大纲和实例代码是选择的重要参考因素。 其次,由于你需要从入门到精通,所以建议选择一套连贯性强的课程,例如一个系列教程,或者一个精心设计的教学计划。这样能够确保学习的完整性,避免学习的断层和重复。 在下载视频教程前,应确保你的设备有足够的空间来存储这些视频文件,并且有可用的网络或者下载工具。很多教学平台提供视频下载的功能,你可以选择购买或者租赁这些课程的视频。另外,你也可以通过一些第三方软件或者在线工具来下载这些教程,注意选择安全可靠的资源。 在学习过程中,要多动手实践,在教学视频中的每个章节或者课时后进行相关练习。通过实际操作来加深理解和熟练相关技术。同时,要多阅读官方文档和相关书籍来弥补教学视频中没有涉及到的知识点,提升自己的编程水平。 总之,Java爬虫是一个需要系统学习和实践的技术领域。通过下载视频教程并按照教学计划逐步学习,结合实际练习和深入阅读相关资料,你将能够在Java爬虫领域逐渐达到精通的水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魑魅魍魉9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值