Java通过jsoup解析整个网站需要的内容

接上上一篇爬取起点小说网的内容说,上一篇只是获取小说名、章节以及章节链接,然后总是感觉不太好,并不能达到获取到整个网站的效果,用户在用时还得自己联网,故改进了改进,这一篇讲能够完全解析小说网,直到解析到内容为止。
 与上一篇思路是一样的,不同的是,在解析时用递归的方式,将获取到这个链接传值到下一个解析入口,层层解析。与上一篇代码不同的是SpilderNovel中的代码,这一篇将只粘贴这一块的代码,对于其他模块的代码,有需要的请看前面的文章。
下面附上代码块:

package xuf.main;

import java.util.ArrayList;
import java.util.Date;
import java.util.stream.Stream;
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.w3c.dom.stylesheets.LinkStyle;
import xuf.entity.NovelAttribute;
import xuf.service.INovel;
import xuf.service.NovelImpl;

public class SpiderNovel {
    public static void main(String[] args) {
        // 数据持久化对象,用于将信息存入数据库
        INovel iNovel = new NovelImpl();
        Long startTime, endTime;
        System.out.println("小爬虫工作启动。。。。。。。。。。。");
        startTime = new Date().getTime();
        Document document;
        try {
            NovelAttribute novelAttribute = new NovelAttribute();
            document = Jsoup.connect("http://www.qidian.com/").get();
            Elements results0 = document.select("div.classify-list > dl > dd > a[href]");
            for (Element e0 : results0) {
                String fictionUr0 = e0.attr("abs:href");
                ArrayList<String> list0 = new ArrayList<String>();
                list0.add(fictionUr0);
                String[] strArray0 = (String[]) list0.toArray(new String[0]);
                for (String strurl0 : strArray0) {
                    System.out.println(strurl0);
                    document = Jsoup.connect(strurl0).get();
                    Elements results1 = document.select("div.channel-focus > div.big-list > ul > li > h3 > a[href]");
                    for (Element e1 : results1) {
                        String fictionUrl1 = e1.attr("abs:href");
                        ArrayList<String> list1 = new ArrayList<String>();
                        list1.add(fictionUrl1);
                        String[] strArray1 = (String[]) list1.toArray(new String[0]);
                        for (String strurl1 : strArray1) {
                            System.out.println(fictionUrl1);
                            document = Jsoup.connect(fictionUrl1).get();

                            Elements results2 = document.select("div.catalog-content-wrap > div.volume-wrap > div.volume > ul > li > a[href]");
                            for (Element e2 : results2) {
                                String fictionUrl2 = e2.attr("abs:href");
                                ArrayList<String> list2 = new ArrayList<String>();
                                list2.add(fictionUrl2);
                                String[] strArray2 = (String[]) list2.toArray(new String[0]);
                                for (String strurl2 : strArray2) {
                                    System.out.println(strurl2);
                                }

                                document = Jsoup.connect(fictionUrl2).get();
                                Elements results4 = document.select("div.book-cover-wrap > h1");
                                for (Element e4 : results4) {
                                    String fictionName = e4.text();
                                    novelAttribute.setFictionName(fictionName);
                                }
                                Elements results3 = document.select("h3.j_chapterName");
                                for (Element e3 : results3) {
                                    String fictionChapter = e3.text();
                                    novelAttribute.setFictionChapter(fictionChapter);
                                }
                                Elements results5 = document.select("div.read-content");
                                for (Element e5 : results5) {
                                    String fictionContent = e5.text();
                                    novelAttribute.setFictionContent(fictionContent);
                                }
                                iNovel.SaveAttribute(novelAttribute);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        endTime = new Date().getTime();
        System.out.println("工作结束,用时" + (endTime - startTime) + "ms");
    }
}

以上就是这次的一个小的改动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值