自動(dòng)監(jiān)測(cè)小說(shuō)更新

  1. 總覽:

    • 項(xiàng)目結(jié)構(gòu)
    • 代碼
    • 部署及啟動(dòng)
  2. 項(xiàng)目結(jié)構(gòu):


    項(xiàng)目結(jié)構(gòu)
  3. 代碼: (一共需要三個(gè)文件)

  • run_linux.py(用于一鍵啟動(dòng))
  • ntxs.py(用于查找數(shù)據(jù))
  • logging_ntxs(用于記錄日志)

run_linux.py

import os

def run(file):
    # 獲取上一級(jí)目錄
    root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    # 當(dāng)前目錄
    local_path = os.path.dirname(os.path.abspath(__file__))
    # 虛擬環(huán)境路徑
    activate_path = f"{root}/venv/bin/activate"
    # 激活虛擬環(huán)境以及啟動(dòng)程序
    os.system(f". {activate_path} && python {local_path}/{file}")
if __name__ == '__main__':
    # 程序主文件
    file_name = r"ntxs.py"
    run(file_name)

ntxs.py

import time
from logging_ntxs import get_logger
import os
import requests
from lxml import etree
import re


def get_title():
    # 爬取頁(yè)面
    url = "https://www.bswtan.com/0/51/"

    # 設(shè)置headers
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/97.0.4692.99 Safari/537.36",
    }

    # 獲取html
    r = requests.get(url=url, headers=headers)
    r.encoding = r.apparent_encoding
    html = r.text

    # 利用xpath獲取最后一章節(jié)標(biāo)題
    tree = etree.HTML(html)
    last_title = tree.xpath('//*[@id="list"]/dl/dd/a/text()')[-1]

    # 將章節(jié)中的數(shù)字提取出來(lái)
    num = int(re.findall(r'\d+', last_title)[0])
    return num, last_title


def send_email(message):
    # 此處換成你的郵箱或者郵箱模塊即可, 不需要郵件通知也可以刪除此方法
    commend = f"echo '{message}' | mail -s '[提示] 逆天邪神已更新!' 郵箱@qq.com"
    os.system(commend)
    logger.info("郵件已發(fā)送!")


if __name__ == '__main__':
    # 返回元組, 第一個(gè)為章節(jié), 第二個(gè)為完整標(biāo)題
    chapter_old = get_title()[0]
    file_path = "/root/logs/ntxs.log"
    logger = get_logger(file_path)
    while True:
        # 獲取元組
        chapter_now_tuple = get_title()
        # 獲取章節(jié)
        chapter_now = chapter_now_tuple[0]
        # 獲取完整標(biāo)題
        chapter_now_title = chapter_now_tuple[1]
        if chapter_now > chapter_old:
            logger.warning(f"發(fā)現(xiàn)新章節(jié), {chapter_now_title}!")
            # 發(fā)送郵件
            send_email(f"發(fā)現(xiàn)新章節(jié)!, {chapter_now_title}, 速速上號(hào)!")
            # 改變判斷條件
            chapter_old = chapter_now
        else:
            logger.info(f"暫無(wú)更新, 目前依舊為{chapter_now_title}!")
        # 每十五分鐘查詢(xún)一次
        time.sleep(900)

logging_ntxs.py

import logging

def get_logger(path):
    # 格式化輸出
    for_mat = "[%(levelname)s]: %(asctime)s PID->%(process)d [信息]: %(message)s"
    # 初始化設(shè)置, 禁用全局日志等級(jí)
    logging.basicConfig(filename=path, format=for_mat, filemode='w')
    # 將requests設(shè)置為WARNING
    logging.getLogger("requests").setLevel(logging.WARNING)
    # 將其他文件設(shè)置為DEBUG
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    return logger
  1. 部署及自啟動(dòng)!!!!
  • 創(chuàng)建目錄
    1,新建一個(gè)名為ntxs的文件夾
    2,在該目錄內(nèi)創(chuàng)建一個(gè)名為code的文件夾
    3,將3個(gè)代碼文件放入code中

  • 創(chuàng)建虛擬環(huán)境, 及安裝依賴(lài)
    1, 回到ntxs文件夾
    2, 執(zhí)行python -m venv venv
    3, 進(jìn)入venv文件夾進(jìn)入bin目錄輸入source activate
    4, pip install requesta lxml
    5, deactivate
    6, 至此安裝完成

  • 添加自啟動(dòng)
    1, crontab -e
    2, 將一下內(nèi)容復(fù)制進(jìn)去即可, 注意修改位置

# 啟用逆天邪神追蹤
@reboot nohup python /root/code/ntxs/code/run_linux.py > /dev/null 2>&1 &
# 每周天00點(diǎn)清空日志
0 0 * * 0 > /root/logs/ntxs.log
  • 現(xiàn)在重啟(reboot), 或者輸入以下即可全天候等待更新!
nohup python /root/code/ntxs/code/run_linux.py > /dev/null 2>&1 &
  • 有更新時(shí)會(huì)自動(dòng)發(fā)送到你設(shè)置的郵箱, 需設(shè)置postfix(具體google), 或者自己寫(xiě)個(gè)郵件模塊更好
  • 并且可以查詢(xún)?nèi)罩?/p>

    日志信息
  • 此教程基于linux!!!!!!!(ubuntu20.04或者debian系的都可以直接使用)
  • 不建議將搜索間隔調(diào)整過(guò)快, 可能會(huì)封ip,而且對(duì)小說(shuō)平臺(tái)也會(huì)造成一定影響
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容