本文轉載自我的博客網站,歡迎來訪訂閱。本篇屬於定製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閱讀器上去了。