最近找了喜欢上了看小说,就是小说是更新的,更新时间没有规律,怎么能及时get小说的推送呢?
因此想到了用python 抓取小说然后推送到手机上这样的方法
我们首先来看看技术路线
那么问题就是两个,第一是如何爬取小说,第二是如何推送到手机上
爬取小说的话,显然用爬虫访问小说网站前端就可以了
因此我们来看看如何推送到手机上
我在这里推荐两种方法
##1.server酱
传送门:http://sc.ftqq.com/3.version
这个流程可以说是很简单
先注册GitHub网站,然后登陆server酱
登陆完成后就会出现如下的界面
系统会给你分配一个keys
只需要post 或get 分配给的keys就行了
##2.QQ邮箱
现在每个人的手机QQ应该是全天在线,因此可以将爬取的小说通过邮箱推送到你的QQ邮箱上,QQ上有QQ邮箱的推送,这样就能及时得到信息
怎么才能跟自己发送呢?
利用QQ邮箱的包容性,将账号注册2个域名
一个是xxx@qq.com 一个是xxx@foxmail.com
开启smtp服务
这样就可以进行用xxx@qq.com发送到 xxx@foxmail.com上
哇哇简直不要太方便
理论讲了半天,不放代码就是耍流氓
我们来看看网站的源码
小说的目录都是放置
小说的内容放在id=’content’里面,访问其中的文字即可
代码附件请食用
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2019-12-12 17:17:22
# @Author : muxiaoxiong
'''
目标:每天运行一次,访问网站,识别最新章节,比本地的库进行比较
如果相同,则忽视
如果新更新,则通过邮箱的方式推送
'''
user_agent = [
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0"]
#随机访问头,防止网站封ip,访问网站不能太频繁,不要给别人的服务器造成压力!!!!
import smtplib # 发送邮件模块
from email.mime.text import MIMEText # 定义邮件内容
from email.header import Header # 定义邮件标题
import requests
from bs4 import BeautifulSoup
import random
import os
import re
import sys
smtpserver = 'smtp.qq.com'
# 发送邮箱用户名密码
user = 'xxxxx@qq.com' #发送邮箱的账号
password = 'xxxxxx' #这里写邮箱的密码 smtp密码
# 发送和接收邮箱
sender = 'xxxxx@qq.com' #发送账号
receive = 'xxxxxx@foxmail.com' #接受账号
def main():
url = 'http://www.xbiquge.la/ #我随便在网上找到小说为例
headers = {'User-Agent': random.choice(user_agent)}
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, 'lxml')
all_name = soup.find('div', id='list').find_all('dd') #具体见前面
paper_num = len(all_name) # 更新数目
ff = open('ly.txt')
old_num = int(ff.readlines()[0])
ff.close()
if paper_num == old_num:
pass
elif paper_num < old_num:
os.remove('ly.txt')
out = open('ly.txt', "a+")
out.write(str(paper_num))
out.close()
elif paper_num > old_num:
# 访问小说发送到邮箱
ohter = paper_num - old_num # 更新的章节数目
new_name = all_name[-ohter:]
for i in new_name:
info = i.find('a')
new_href = 'http://www.xbiquge.la' + info.get('href') # 新的链接
title = i.get_text() # 新的题目
send_email(title, new_href)
os.remove('ly.txt')
out = open('ly.txt', "a+")
out.write(str(paper_num))
out.close()
def send_email(title, new_href):
headers = {'User-Agent': random.choice(user_agent)}
r = requests.get(new_href, headers=headers)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, 'lxml')
content = soup.find('div', id='content').get_text(
).replace("\xa0\xa0\xa0\xa0", '<br /><br />') # 小说的内容 <br /> 表示换行
# 通过QQ邮箱发送
subject = title
msg = MIMEText(content, 'html', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = sender
msg['To'] = receive
# SSL协议端口号要使用465
smtp = smtplib.SMTP_SSL(smtpserver, 465) # 这里是服务器端口!
# HELO 向服务器标识用户身份
smtp.helo(smtpserver)
# 服务器返回结果确认
smtp.ehlo(smtpserver)
# 登录邮箱服务器用户名和密码
smtp.login(user, password)
smtp.sendmail(sender, receive, msg.as_string())
smtp.quit()
if __name__ == '__main__':
main()
最后一个,怎么做定时运行呢?
如果你有linux系统的话
可以使用crontab做内置的定时程序
本文就爬虫和调用python 发送QQ邮箱进行了联合学习
更多的是娱乐学习为主
喵