欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實踐練習輕松幾行實現(xiàn)追書神器

 更新時間:2021年10月19日 09:33:25   作者:spring小楊  
讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個追書神器,用技術改變生活,大家可以在過程中查缺補漏,提升水平

大家好,我是Spring小楊,一個有夢想的Java司機。

前不久,有個老同學找到我,問有沒有什么靠譜的追書神器?

我想著這玩意無非用爬蟲,但是還是得盡量低調,不然牢底坐穿!

正版網站的資源很難爬下來的,所以書源還是只能搜盜版網站,某趣閣就是個不錯的選擇。

說干就干,我立刻用eclipse創(chuàng)建了一個Java項目,還是按照之前的配方,用Hutool做定時任務。

因為要爬取網站信息,所以還是得借助jsoup。

jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數(shù)據(jù)。

還是之前一樣的配方,不過這次加了jsoup和javax.mail。為什么要發(fā)送郵件呢?那是因為我想要定時去檢測網站的小說有沒有更新,如果更新了,就及時把最新的章節(jié)通過郵件的形式發(fā)送給我,那不是更好嗎?

這樣我就可以立刻知道小說有沒有更新了,然后更新的話,去自己的郵箱看就行了。

郵箱里面是肯定沒有廣告的啦!

public static HashMap cache = new HashMap<>();
public static Map cookies = new HashMap<>();
public static String url = https://www.biquwx.la/xxx/;

首先,定義幾個成員變量,分別是緩存cache,cookie 和 url。我就不用數(shù)據(jù)庫了,用一個靜態(tài)的HashMap來做緩存。cookie是每次爬取網頁后保存的,就是盡量模擬得像我瀏覽器訪問。最后是url,就是小說網站的實際地址,大概是這么一個目錄。

如果有更新,那就一定會出現(xiàn)在這個網頁!

下面是我發(fā)送請求的代碼:

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);

為了不希望他一下子發(fā)送太多郵件,我單獨設置了一個起始章節(jié),放在txt文本里面的。

里面就一個最新的章節(jié)標題:

已經發(fā)送過的章節(jié),我把它放到緩存中,不再重復發(fā)送:

//先檢查是否已經在緩存中
if(cache.containsKey(element.text())){
	System.out.println(element.text()+ "已經發(fā)送,無需重復發(fā)送!");
	continue;
}

最后,再用Java發(fā)送一份郵件到自己的郵箱就可以啦!

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("你的發(fā)送郵箱");
account.setUser("你的發(fā)送郵箱");
account.setPass("你發(fā)送郵箱的授權碼");
MailUtil.send(account, "xxxxxxxxx@qq.com",element.text() , content, true, new File[0]);
System.out.println("發(fā)送成功!");

我用的是163郵箱,然后發(fā)到對應的qq郵箱。

下面是我成功收到的小說章節(jié)郵件:

配上定時任務,效果是達到了, 但是這個還是得放在服務器上運行才好,不然總不可能一直開著電腦吧,哈哈。

全部源代碼如下:

/**
     * 自動發(fā)送小說最新章節(jié)
     */
	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"); //讀取開始章節(jié),如果服務重啟,必須重新修改該文件
		
		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()+ "已經發(fā)送,無需重復發(fā)送!");
					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("你的發(fā)送郵箱");
			     account.setUser("你的發(fā)送郵箱");
			     account.setPass("授權碼");
			    // MailUtil.send(account, "你的接收郵箱",element.text() , content, true, new File[0]);
			     System.out.println("發(fā)送成功!");
			}
	
		}
	}

最后,爬蟲雖好,不過自娛自樂一下就好了哈,本文也只是提供一個傳統(tǒng)思路,切勿用作違法用途哦~~

到此這篇關于Java實踐練習輕松幾行實現(xiàn)追書神器的文章就介紹到這了,更多相關Java 追書神器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于在Java中如何使用yaml的實例

    關于在Java中如何使用yaml的實例

    這篇文章主要介紹了關于在Java中如何使用yaml的實例,YAML是一種輕量級的數(shù)據(jù)序列化格式。它以易讀、易寫的文本格式表示數(shù)據(jù),支持列表、字典等各種數(shù)據(jù)結構,被廣泛應用于配置文件、數(shù)據(jù)傳輸協(xié)議等領域,需要的朋友可以參考下
    2023-08-08
  • SpringBoot解決ajax跨域問題的方法

    SpringBoot解決ajax跨域問題的方法

    這篇文章主要為大家詳細介紹了SpringBoot解決ajax跨域問題的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 深入理解Spring Aop的執(zhí)行順序

    深入理解Spring Aop的執(zhí)行順序

    本文將結合實例代碼,介紹Spring Aop的執(zhí)行順序,非常具有實用價值,需要的朋友可以參考下
    2021-06-06
  • java數(shù)據(jù)結構與算法之桶排序實現(xiàn)方法詳解

    java數(shù)據(jù)結構與算法之桶排序實現(xiàn)方法詳解

    這篇文章主要介紹了java數(shù)據(jù)結構與算法之桶排序實現(xiàn)方法,結合具體實例形式詳細分析了桶排序的概念、原理、實現(xiàn)方法與相關操作技巧,需要的朋友可以參考下
    2017-05-05
  • 圖解Java經典算法快速排序的原理與實現(xiàn)

    圖解Java經典算法快速排序的原理與實現(xiàn)

    快速排序是基于二分的思想,對冒泡排序的一種改進。主要思想是確立一個基數(shù),將小于基數(shù)的數(shù)放到基數(shù)左邊,大于基數(shù)的數(shù)字放到基數(shù)的右邊,然后在對這兩部分進一步排序,從而實現(xiàn)對數(shù)組的排序
    2022-09-09
  • java分布式面試降級組件Hystrix的功能特性

    java分布式面試降級組件Hystrix的功能特性

    這篇文章主要為大家介紹了java分布式面試關于降級組件Hystrix的功能特性回答,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java spring webmvc如何實現(xiàn)控制反轉

    Java spring webmvc如何實現(xiàn)控制反轉

    這篇文章主要介紹了Java spring webmvc如何實現(xiàn)控制反轉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Struts和servlet不能共存問題解決方法

    Struts和servlet不能共存問題解決方法

    這篇文章主要介紹了Struts和servlet不能共存問題解決方法,共有三種方法,需要的朋友可以參考下。
    2017-09-09
  • Java中的鎖分類的詳細介紹

    Java中的鎖分類的詳細介紹

    這篇文章主要介紹了Java中的鎖分類的詳細介紹,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    SpringBoot+ruoyi框架文件上傳和下載的實現(xiàn)

    文件的上傳和下載功能,是項目開發(fā)過程中比較常見的業(yè)務需求,本文主要介紹了SpringBoot+ruoyi框架文件上傳和文件下載的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09

最新評論