网站内容更新的通知(有没有更新不就行了的实现思路(一)(组图) )

优采云 发布时间: 2022-04-10 19:07

  网站内容更新的通知(有没有更新不就行了的实现思路(一)(组图)

)

  前言

  最近一直在追小说,没事的时候会时不时去看看有没有更新,所以写了个脚本帮我看看有没有更新。

  文本

  实现想法

  首先找到我们平时看小说的网站,爬取小说的目录页,查看章节是否更新,发邮件通知自己有更新,否则继续爬取查看。

  执行

  我用过网站这个,(盗版小说网站,有能力的请支持正版)。

  1.先在搜索栏搜索你的小说,看看有没有你在追的小说

  2. 仔细分析url,你会发现每本小说都有一个或多个id,格式如下。15_15698、12_12366 等

  3.提取最新章节数,对比你看到的章节数。如果该数字大于该数字,则将其视为更新。

  4.提取内容并发送邮件(百度发送方法有很多教程)

  如果你也用这个网站看小说,可以直接修改我的源码使用。代码附在文章的末尾

  代码运行

  就算脚本帮你查小说有没有更新,那你也必须一直保持脚本运行,所以有云服务器肯定是最好的,毕竟你的电脑总是关机的。我将自己的代码挂在自己的服务器上。linux运行命令示例如下 nohup python3 -u listen.py -a 12_12585 -n 1000 --email= > novel.log &

  命令解释

  nohup 表示退出远程连接终端时程序不会被杀死(ps -aux 可以看到正在运行的程序,可以自己试试)

  > novel.log & 在后台执行并将输出重定向到 Novel.log 文件

  -a -n --email 这些是输入参数

  python3 -u -listen.py 在python3环境下运行listen.py脚本,-u代表实时输出到文件,否则查看novel.log时可能是空文件

  (本来想用django写一个网站,让一些没有服务器的读者也可以用小说通知这个脚本,但是开发中没有时间,所以如果没有服务器,挂在这台机器上或者换个方式。)

  总结

  之前用beautifulsoup库来解析获取数据,但是在找工作的时候发现很多人会问懂xpath,所以这次只用了xpath。

  然后学会了用命令行输入nohup、ps等参数和命令。虽然我的博客很幼稚(绝不抄袭,坚决原创),但我可以边玩边学。不是为了它。

<p>import smtplib

from email.mime.text import MIMEText

# email 用于构建邮件内容

from email.header import Header

# 用于构建邮件头

from lxml import etree

import requests

import re

import time

import getopt

import sys

def send_mail(content):

# 发信方的信息:发信邮箱,QQ 邮箱授权码

from_addr = &#39;XXXXXX&#39;

password = &#39;XXXXXXX&#39;

# 发信服务器

smtp_server = &#39;smtp.qq.com&#39;

# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码

msg = MIMEText(content,&#39;plain&#39;,&#39;utf-8&#39;)

# 邮件头信息

msg[&#39;From&#39;] = Header(from_addr)

msg[&#39;To&#39;] = Header(to_addr)

msg[&#39;Subject&#39;] = Header(&#39;更新了&#39;)

# 开启发信服务,这里使用的是加密传输

server = smtplib.SMTP_SSL(host=smtp_server)

server.connect(smtp_server,465)

# 登录发信邮箱

server.login(from_addr, password)

# 发送邮件

server.sendmail(from_addr, to_addr, msg.as_string())

# 关闭服务器

server.quit()

#爬取文章内容

def get_content(urls):

global new_art

new_art = new_art + int(len(urls))

all_content = &#39;&#39;

#因为是从最新的章节获取,所以倒序迭代

for detial in reversed(urls) :

#网络波动有时请求会失败,暂停一会在请求

while True:

url = host + detial

try:

res = requests.get(url=url,headers=headers)

except:

time.sleep(60)

else:

break

res.encoding = "utf-8"

html = etree.HTML(res.text)

title = html.xpath(&#39;//div[@class="bookname"]/h1/text()&#39;)

all_content = all_content + title[0] +&#39;\n&#39; + &#39;网页链接:&#39; + url + &#39;\n&#39;

content = html.xpath(&#39;//div[@id="content"]/text()&#39;)

#删除多余的无用字符

content = re.sub(r&#39;[(\\u3000)\&#39;]&#39;,&#39;&#39;,str(content),count=0,flags=re.M|re.I)

all_content = all_content + content + &#39;\n&#39;

return all_content

#通过标题获取章节数

def get_new_art_num(text):

art_num = re.search(&#39;\d+&#39;,text[0])

return int(art_num.group(0))

#获取该网页最新的五章,检查是否更新

def get_url(a_id):

url = host + a_id + &#39;/&#39;

re = requests.get(url=url, headers=headers)

re.encoding = "utf-8"

tree = etree.HTML(re.text)

new_art_url = []

#获取最新的五章

#正常小说一天也不会更新超过五章,如果有自己修改

for i in range(1,6):

i = str(i)

art_title = tree.xpath(&#39;//div[@id="list"]//dd[&#39; + i + &#39;]/a/text()&#39;)

art_url = tree.xpath(&#39;//div[@id="list"]//dd[&#39; + i + &#39;]/a/@href&#39;)

if get_new_art_num(art_title)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线