小说搜索站快速搭建:2.内容页解析

三方框架

  1. JSOUP
  2. okhttp

解析要素

  1. 翻章:上一章
  2. 翻章:下一章
  3. 目录
  4. 内容

小说搜索站快速搭建:2.内容页解析

表设计

/**
     * 内容
     */
    private String content;
    @Field("content_title")
    private String contentTitle;
    @Field("chapter_url")
    private String chapterUrl;
    @Field("next_chapter_url")
    private String nextChapterUrl;
    @Field("last_chapter_url")
    private String lastChapterUrl;

解析代码

public BookChapter content(String url) {
        BookChapter bookChapter = new BookChapter();

        BookSite bookSite = getSite(url);
        try {
            Document document = download(url);

            Element titleElement = document.selectFirst(bookSite.getContentTitle());
            if (titleElement != null) {
                bookChapter.setName(titleElement.text());
            }

            Element chapterElement = document.selectFirst(bookSite.getChapterUrl());
            if (chapterElement != null) {
                bookChapter.setChapterUrl(chapterElement.absUrl("href"));
            }

            Element nextElement = document.selectFirst(bookSite.getNextChapterUrl());
            if (nextElement != null) {
                bookChapter.setNextChapterUrl(nextElement.absUrl("href"));
            }

            Element lastElement = document.selectFirst(bookSite.getLastChapterUrl());
            if (lastElement != null) {
                bookChapter.setLastChapterUrl(lastElement.absUrl("href"));
            }

            Element contentElement = document.selectFirst(bookSite.getContent());

            if (contentElement != null) {
                contentElement.select("a").remove();
                contentElement.select("script").remove();
                contentElement.select("style").remove();

                bookChapter.setContent(contentElement.html());
            }

        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }

        return bookChapter;
    }

最终结果

小说搜索站快速搭建:2.内容页解析

难点

技术没有什么难点,难在日常的维护上。

相关推荐