Loading

python实践:小说更新时通过邮件提醒

实现:获取起点网址的《剑来》小说目录,若更新则发送邮件。

分析目标网址,获取需要的内容

方法1:获取网页的目录元素

  打开网址《剑来》,按F12打开开发者工具,然后选择元素,右键复制元素的xpath路径。相应的,在python中,可以通过lxml库获取网页内容,然后通过之前复制的xpath来选择相对应的元素。

chap=selector.xpath('/html/body/div[3]/div[2]/div[2]/div/ul[@class="chapter-list clearfix"]/li')
lastTitle=selector.xpath('/html/body/div[3]/div[2]/div[2]/div/ul[@class="chapter-list clearfix"]/li/a/text()')

lastTitle=lastTitle[-1]
img1

方法2:获取json数据

  或者,直接可以打开手机端的《剑来》页面,同样按F12,选择Network选项,然后查看里面内容,可以发现一个json请求(如下图)。

img2

  具体网址为:
https://m.zongheng.com/h5/ajax/chapter/list?h5=1&bookId=672340&pageNum=1&pageSize=20&chapterId=&asc=0,猜测asc=0控制着数据的排序方式,所以改为asc=1并在网页上打开,发现获取的数据依旧是正序,通过对照原有请求的头文件,发现影响请求结果的两个参数:ZHIDReferer

img3

  所以在python进行请求时,也需要构造headers和cookies两个参数。
img4

  最后根据获取的json数据获取最新章节。

# 章节名和章节数(需要先将获取的json字符串反序列化为python对象)
chapterName=chaplist['chapterlist']['chapters'][0]['chapterName']
chapterCount=chaplist['chapterlist']['chapterCount']

更新时邮件提醒

  将第一次获取的章节存为文件temp.json,之后获取的都与之比较。若更新,则通过邮件提醒。

数据的存取是通过json的序列化和反序列化方法(json.load()、json.dump())。

而邮件提醒使用的是smtplib库,但是其在服务器上发送邮件时,可能不能通过默认的25端口发送邮件,因为其可能被服务商禁止使用。所以需要走SSL连接的465端口。

img5

  另外,最好不用网易邮箱(136,126)发送邮件,可能是由于其本身的安全策略,导致它在服务器上抽风性地不能发送邮件。

附加功能:使用代理

  由于网站的反爬虫的策略,如果访问过于频繁,可能会导致让你输入验证码才能继续访问(通过json请求获取数据时应该「不会」遇到这个问题)。这个时候就需要代理。我们可以在github上找python编写的爬取代理池项目,或者自己在相关网站上爬取代理。

附加功能:服务器定时运行

通过命令crontab -e在服务器上部署定时运行服务。

  • 通过crontab服务定时运行python脚本。但是在crontab上的服务不能很好地杀掉特定的进程,所以上面地python脚本会在每天16:33运行。
img6

  • 通过crontab定时运行shellshell脚本中控制python程序的运行,停止。crontab服务会每6小时运行。
img7  
@crontab代码

img8  
@shell代码

其它

img9  
@服务器通知
posted @ 2025-03-12 22:20  一起滚月球  阅读(9)  评论(0)    收藏  举报