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

来源:互联网 发布:刚开的淘宝店怎么做 编辑:程序博客网 时间:2024/05/18 01:12

 接上上一篇爬取起点小说网的内容说,上一篇只是获取小说名、章节以及章节链接,然后总是感觉不太好,并不能达到获取到整个网站的效果,用户在用时还得自己联网,故改进了改进,这一篇讲能够完全解析小说网,直到解析到内容为止。
 与上一篇思路是一样的,不同的是,在解析时用递归的方式,将获取到这个链接传值到下一个解析入口,层层解析。与上一篇代码不同的是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");    }}

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

原创粉丝点击