本文转载自我的博客网站,欢迎来访订阅。本篇属于定制RSS
系列终极一弹,是三种方式中自由度最高、定制化最强的,也须要必定的编程能力。附上前两篇连接:一、利用Feed43为网站自制RSS源;二、如何优雅快速地利用Huginn制做专属RSS。开始以前先对比一下以上三种方式:html
方法 | 优点 | 不足 | 复杂性 | 稳定性 | 定制性 |
---|---|---|---|---|---|
Feed43 | 快速、便捷、免费 | 免费版需间隔6小时,部分网站不可用 | 简单 | 通常 | 中 |
Huginn | 快速、安装后可便捷添加 | 专业化程度偏高,须要服务器 | 高 | 高 | 高 |
Python | 高度定制、占用内存小 | 专业化程度偏高,不可随意改正 | 通常 | 高 | 极高 |
看我的须要进行选择,Huginn虽安装麻烦点,可是一个自动化神器,妙用不只局限于此。python
Python脚本须要放置在云主机/云服务器上使用,若是你尚未,赶快购置一台吧编程
须要了解:CSS基础;Python基础;Linux基础命令;利用浏览器开发者工具找到对应内容代码centos
个人使用环境:腾讯云主机centos7.5,Python2.7(服务器默认已安装的)浏览器
先上代码,如下代码仅供参考,重要的是学会利用其中的代码和方法。bash
如下全部操做基于江西师范大学大学教务在线网站服务器
# -*- coding: utf-8 -*- import datetime import time import PyRSS2Gen from bs4 import BeautifulSoup import requests import re import sys reload(sys) sys.setdefaultencoding('utf8') //防止中文乱码 xmlpath='/local/myrss/jxnu.xml' //RSS文件放置地址,须要放置在HTTP服务开启的文件夹下 now_time=time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time())) //请求头,有些页面须要登陆后才能抓取,cookie长期有效的能够设置cookie headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36\ (KHTML, like Gecko) Chrome/75.0.3770.142 Mobile Safari/537.36', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Content-Type': 'text/html; charset=utf-8', 'Host': 'jwc.jxnu.edu.cn', 'Cookie': 'ASP.NET_SessionId=0xdlujzzynq5m2gnwteyhopt;\ JwOAUserSettingNew2019=UserNum=VRLfbUKgQCAPo00dgIVGEQ==&UserName=dlxxDMMsdKU=\ &UserType=WmTb330+jk8=&UserLoginTime='+now_time } def setrss(): rssitems=[] html = requests.get('https://jwc.jxnu.edu.cn/Portal/Index.aspx') //得到网站html代码 bs = BeautifulSoup(html.text,'html.parser') contents = bs.select('.long_item > a') //BeautifulSoup得到通知的标题和对应连接 for content in contents: title=content.text href='https://jwc.jxnu.edu.cn/Portal/'+content.get('href') detile=requests.get(url=href,headers=headers) bs_0 = BeautifulSoup(detile.text,'html.parser') article = bs_0.select('#main-content') b=re.search(r"该文档须要登陆后再查看",article[0].text) if b is None: descriptions=str(article[0]) else: descriptions=content.get('title') item=PyRSS2Gen.RSSItem( //item即为一项内容 title=title, //每一项内容的标题 link=href, //每一项内容的连接 description = descriptions, //每一项内容的描述/内容 pubDate =datetime.datetime.now() //更新时间 ) rssitems.append(item) //rssitems即为全部内容 rss = PyRSS2Gen.RSS2( title = "江西师范大学教务在线", //rss源的名称 link = "https://jwc.jxnu.edu.cn/Portal/Index.aspx", //rss源的原地址 description = "江西师范大学教务在线", //rss源的描述 lastBuildDate = datetime.datetime.now(), items = rssitems) rss.write_xml(open(xmlpath, "w"),encoding='utf-8') //生成RSS格式的xml文件 if __name__ == '__main__': setrss()
说明:PyRSS2Gen、BeautifulSoup两个模块是须要安装的,安装过忽略,代码基于Python2.7cookie
pip install BeautifulSoup pip install PyRSS2Gen
RSS的本质就是一个固定格式的文件,因此本方法按照如下三步进行,定时执行脚本生成xml文件放置在云服务器上。app
有的页面能够直接抓取,有的页面须要登陆后才能看到,而且有的网站有反爬虫措施,看抓取的网站采起不一样方法。本示例先经过BeautifulSoup模块获取教务在线通知的标题和连接,而后再逐一访问连接下的全文内容。工具
html = requests.get('https://jwc.jxnu.edu.cn/Portal/Index.aspx') //得到网站html代码 bs = BeautifulSoup(html.text,'html.parser') contents = bs.select('.long_item > a') //BeautifulSoup得到通知的标题和连接 for content in contents: title=content.text href='https://jwc.jxnu.edu.cn/Portal/'+content.get('href') detile=requests.get(url=href,headers=headers) bs_0 = BeautifulSoup(detile.text,'html.parser') article = bs_0.select('#main-content') b=re.search(r"该文档须要登陆后再查看",article[0].text) if b is None: descriptions=str(article[0]) else: descriptions=content.get('title')
得到内容后将内容构形成相关格式,主要利用PyRSS2Gen模块构造
item=PyRSS2Gen.RSSItem( //构造一个item title=title, //每一项内容的标题 link=href, //每一项内容的连接 description = descriptions, //每一项内容的描述/内容 pubDate =datetime.datetime.now() //更新时间 ) rssitems.append(item) //rssitems即为全部内容 rss = PyRSS2Gen.RSS2( //构造RSS2.0格式的对象 title = "江西师范大学教务在线", //rss源的名称 link = "https://jwc.jxnu.edu.cn/Portal/Index.aspx", //rss源的原地址 description = "江西师范大学教务在线", //rss源的描述 lastBuildDate = datetime.datetime.now(), items = rssitems) rss.write_xml(open(xmlpath, "w"),encoding='utf-8') //生成RSS格式的xml文件
利用crontab定时执行该脚本并运行生成文件,而后再开启公网可访问的相关服务,一个RSS源就生成了!
链接云服务器后,输入如下命令,设置定时任务
vi /etc/crontab
添加以下内容,表示每半小时root用户使用python执行一次位于/local/myrss的jxnu-rss.py脚本,酌情更改。
*/30 * * * * root python /local/myrss/jxnu-rss.py
方法有不少,这里使用Python下的SimpleHTTPServer。
SimpleHTTPServer
在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer。进入到生成的xml文件所在文件夹,输入以下命令回车
nohup python -m SimpleHTTPServer 8080 &
在命令开头加一个nohup,忽略全部的挂断信号,若是当前bash关闭,则当前进程会挂载到init进程下,成为子进程,这样退出关闭服务器链接服务仍旧在运行。以上内容酌情修改,而后浏览器输入http://你的服务器IP:8080/jxnu.xml回车看到RSS内容即表示成功,能够将其添加到RSS阅读器上去了。