我做了很多研究,但没有相关的东西起作用。基本上,我试图抓取RSS Feed,并在一个使用Python Flask创建的网页上填充表格格式的数据。我已经从字典中抓取了数据。但它不会实时(或每5秒)获取网页上的数据。
下面是使用formfeed,rss_feed.py抓取RSS Feed的代码。
import feedparser
import time
def feed_data():
RSSFeed = feedparser.parse("https://www.upwork.com/ab/feed/jobs/rss?sort=recency&paging=0%3B10&api_params=1&q=&securityToken=2c2762298fe1b719a51741dbacb7d4f5c1e42965918fbea8d2bf1185644c8ab2907f418fe6b1763d5fca3a9f0e7b34d2047f95b56d12e525bc4ba998ae63f0ff&userUid=424312217100599296&orgUid=424312217104793601")
feed_dict = {}
for i in range(len(RSSFeed.entries)):
feed_list = []
feed_list.append(RSSFeed.entries[i].title)
feed_list.append(RSSFeed.entries[i].link)
feed_list.append(RSSFeed.entries[i].summary)
published = RSSFeed.entries[i].published
feed_list.append(published[:len(published)-6])
feed_dict[i] = feed_list
return feed_dict
if __name__=='__main__':
while True:
feed_dict = feed_data()
#print(feed_dict)
#print("==============================")
time.sleep(5)在此脚本上使用time.sleep()。但是当我将它导入app.py时,它不能每5秒重新加载一次。下面是运行Flask应用程序app.py的代码:
from flask import Flask, render_template
import rss_feed
feed_dict = rss_feed.feed_data()
app = Flask(__name__)
@app.route("/")
def hello():
return render_template('home.html', feed_dict=feed_dict)我也尝试过使用APScheduler中的BackgroundScheduler。似乎什么都不起作用。Formfeed的“etag”和“modified”由于某种原因无法识别(它是否已被弃用?)。我甚至尝试过在meta标签中使用'refresh‘属性。但这只会更新Jinja2模板,而不会更新代码本身:
<meta http-equiv="refresh" content="5">我真的被困在这个问题上了。
这是一个(半完成)应用程序的链接:https://rss-feed-scraper.herokuapp.com/
发布于 2020-07-08 04:46:12
你的
feed_dict = rss_feed.feed_data()处于模块级。
当Python启动时,它会执行这些行,直到您重新启动应用程序时才会重新加载它。
如果你对这个话题感兴趣,请在谷歌上搜索runtime vs compile time python。
也就是说,我建议您使用JavaScript函数进行轮询,该函数每5秒轮询一次远程RSS。
这看起来像这样
setInterval(function(){
//code goes here that will be run every 5 seconds.
}, 5000);发布于 2020-07-08 17:44:17
我尝试了很多方法,但我发现这是解决这个问题的最简单的方法:
from flask import Flask, render_template
import rss_feed
app = Flask(__name__)
feed_dict={}
def update_data(interval):
Timer(interval, update_data, [interval]).start()
global feed_dict
feed_dict = rss_feed.feed_data()
update_data(5)
@app.route("/")
def hello():
#feed_dict = rss_feed.feed_data()
#feed_dict=feed_data()
# time.sleep(5)
return render_template('home.html', feed_dict=feed_dict)一个简单的update_data()就解决了整个问题,不需要任何额外的模块,JavaScript,AJAX等。
https://stackoverflow.com/questions/62781514
复制相似问题