本篇内容介绍了“怎么用Java实现追书神器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
还是之前一样的配方,不过这次加了jsoup和javax.mail。为什么要发送邮件呢?那是因为我想要定时去检测网站的小说有没有更新,如果更新了,就及时把最新的章节通过邮件的形式发送给我,那不是更好吗?
这样我就可以立刻知道小说有没有更新了,然后更新的话,去自己的邮箱看就行了。
邮箱里面是肯定没有广告的啦!
public static HashMap cache = new HashMap<>(); public static Map cookies = new HashMap<>(); public static String url = https://www.biquwx.la/xxx/;
首先,定义几个成员变量,分别是缓存cache,cookie 和 url。我就不用数据库了,用一个静态的HashMap来做缓存。cookie是每次爬取网页后保存的,就是尽量模拟得像我浏览器访问。最后是url,就是小说网站的实际地址,大概是这么一个目录。
如果有更新,那就一定会出现在这个网页!
下面是我发送请求的代码:
Connection con = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3") .header("Accept-Encoding", "gzip, deflate") .header("Connection","keep-alive") .header("Upgrade-Insecure-Requests", "1").cookies(cookies);
为了不希望他一下子发送太多邮件,我单独设置了一个起始章节,放在txt文本里面的。
里面就一个最新的章节标题:
已经发送过的章节,我把它放到缓存中,不再重复发送:
//先检查是否已经在缓存中 if(cache.containsKey(element.text())){ System.out.println(element.text()+ "已经发送,无需重复发送!"); continue; }
最后,再用Java发送一份邮件到自己的邮箱就可以啦!
MailAccount account = new MailAccount(); account.setHost("smtp.163.com"); account.setPort(Integer.valueOf(465)); account.setAuth(true); account.setSslEnable(Boolean.valueOf(true)); account.setConnectionTimeout(1000L); account.setSocketFactoryFallback(true); account.setFrom("你的发送邮箱"); account.setUser("你的发送邮箱"); account.setPass("你发送邮箱的授权码"); MailUtil.send(account, "xxxxxxxxx@qq.com",element.text() , content, true, new File[0]); System.out.println("发送成功!");
我用的是163邮箱,然后发到对应的qq邮箱。
下面是我成功收到的小说章节邮件:
配上定时任务,效果是达到了, 但是这个还是得放在服务器上运行才好,不然总不可能一直开着电脑吧,哈哈。
全部源代码如下:
/** * 自动发送小说最新章节 */ public static void sendMail() throws IOException{ System.out.println("开始准备爬取.."); Connection con = Jsoup.connect(url) .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") .header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3") .header("Accept-Encoding", "gzip, deflate") .header("Connection","keep-alive") .header("Upgrade-Insecure-Requests", "1").cookies(cookies); Response execute = con.execute(); cookies = execute.cookies(); String body = execute.body().toString(); Document doc = Jsoup.parse(body); Elements as = doc.getElementsByTag("a"); boolean shouldSend = false; String start = FileUtil.readString("C:/start.txt", "UTF-8"); //读取开始章节,如果服务重启,必须重新修改该文件 for (Iterator iterator = as.iterator(); iterator.hasNext();) { Element element = (Element) iterator.next(); if(element.text().equals(start)){ shouldSend = true; } if(shouldSend && element.text().startsWith("第")){ //先检查是否已经在缓存中 if(cache.containsKey(element.text())){ System.out.println(element.text()+ "已经发送,无需重复发送!"); continue; } con = Jsoup.connect(url + element.attr("href")); String content = Jsoup.parse(con.execute().body()).getElementById("content").html(); cache.put(element.text(), ""); MailAccount account = new MailAccount(); account.setHost("smtp.163.com"); account.setPort(Integer.valueOf(465)); account.setAuth(true); account.setSslEnable(Boolean.valueOf(true)); account.setConnectionTimeout(1000L); account.setSocketFactoryFallback(true); account.setFrom("你的发送邮箱"); account.setUser("你的发送邮箱"); account.setPass("授权码"); // MailUtil.send(account, "你的接收邮箱",element.text() , content, true, new File[0]); System.out.println("发送成功!"); } } }
“怎么用Java实现追书神器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。