我目前正在建立一个基于Python3.6 Flask的网站,该网站托管在Flask服务器上,并提供从网上其他来源获取的产品的实时价格,所有这些都集中在一个地方,以便于比较。 Currentley我有一个使用BeautifulSoup4的scraper.py文件,该文件可在Web上获取我需要的信息。包含此信息的变量将导入到名为app.py的文件中,该文件包含flask脚本作为模块(来自scraper.py import x,y,z)。X,Y,Z变量通过flask传递到网页,并通过jinja 2语法<p> {{ X }} </p>
显示。
我面临的问题是,在flask服务器启动时,scraper.py仅执行一次。但是,我需要更新变量,以便显示最新信息。为了解决我的问题,我创建了一个为数据抓取的循环,然后暂停五分钟,然后再次运行。但是,由于它们是一个循环,所以我的app.py文件似乎无法导入scraper.py文件,结果网页上没有显示任何信息。
是否可以同时运行两个python脚本(flask Web服务器脚本和scraper)并将实时数据报告给网页?我现在很困。谢谢!App.py:
# Import Modules Here:
import markdown
import os
import datetime
# Import Flask Framework Here:
from flask import Flask, flash, redirect, render_template, request, session, abort, url_for
app = Flask(__name__)
# Import Variables From ScrprAG.py:
from ScprAG import AG_GRAM_SPOT, AG_OUNCE_SPOT, GLDAG_BRITANNIA, GLDAG_MAPLE, GLDAG_PHILHARMONIC, BBPAG_BRITANNIA, BBPAG_MAPLE, BBPAG_PHILHARMOIC
# ./Home Script + Portfolio Page:
@app.route("/")
@app.route("/index")
def index():
return render_template('index.html', AG_GRAM_SPOT_WEB=AG_GRAM_SPOT, AG_OUNCE_SPOT_WEB=AG_OUNCE_SPOT, GLDAG_BRITANNIA_WEB=GLDAG_BRITANNIA, BBPAG_BRITANNIA_WEB=BBPAG_BRITANNIA, GLDAG_PHILHARMONIC_WEB=GLDAG_PHILHARMONIC, BBPAG_PHILHARMOIC_WEB=BBPAG_PHILHARMOIC, GLDAG_MAPLE_WEB=GLDAG_MAPLE, BBPAG_MAPLE_WEB=BBPAG
_MAPLE)
Scraper.py:
# Import Modules Here:
import requests
import urllib.request
import time
from bs4 import BeautifulSoup
# Variable List:
url_spot_gram = (None) # AG_GRAM_SPOT
AG_GRAM_SPOT = (None)
url_spot_ounce = (None) # AG_OUNCE_SPOT
AG_OUNCE_SPOT = (None)
url_1 = (None) # GLDAG_BRITANNIA
GLDAG_BRITANNIA = (None)
url_2 = (None) # BBPAG_BRITANNIA
BBPAG_BRITANNIA = (None)
url_3 = (None)
GLDAG_PHILHARMONIC = (None)
url_4 = (None)
BBPAG_PHILHARMOIC = (None)
url_5 = (None)
GLDAG_MAPLE = (None)
url_6 = (None)
BBPAG_MAPLE = (None)
# Scraping Script Here:
def job():
# Current Silver Spot Price: GRAM:
global AG_GRAM_SPOT
url_spot_gram = 'https://www.bullionbypost.co.uk/silver-price/silver-price-per-gram/'
response = requests.get(url_spot_gram)
soup = BeautifulSoup(response.text, 'html.parser')
AG_GRAM_SPOT = soup.find('span', {'name': 'current_price_field'})
# Current Silver Spot Price: OUNCE:
global AG_OUNCE_SPOT
url_spot_ounce = 'https://www.bullionbypost.co.uk/silver-price/week/ounces/GBP/'
response = requests.get(url_spot_ounce)
soup = BeautifulSoup(response.text, 'html.parser')
AG_OUNCE_SPOT = soup.find('span', {'name': 'current_price_field'})
# Script: GOLD.CO.UK | Silver Britannia
global GLDAG_BRITANNIA
url_1 = 'https://www.gold.co.uk/silver-coins/silver-britannia-coins/1oz-silver-britannia-dog-2018/'
response = requests.get(url_1)
soup = BeautifulSoup(response.text, 'html.parser')
GLDAG_BRITANNIA = soup.find('td', {'id': 'total-price-inc-vat-1'})
# Script: BULLIONBYPOST.CO.UK | Silver Britannia
global BBPAG_BRITANNIA
url_2 = 'https://www.bullionbypost.co.uk/silver-coins/britannia-silver-ounce/1oz-silver-britannia-best-value/'
response = requests.get(url_2)
soup = BeautifulSoup(response.text, 'html.parser')
BBPAG_BRITANNIA = soup.find('td', {'id': 'price-inc-vat-per-unit-1'})
# Script: GOLD.CO.UK | Silver Philharmonic
global GLDAG_PHILHARMONIC
url_3 = 'https://www.gold.co.uk/silver-coins/austrian-silver-philharmonic-coins/silver-philharmonic-2020/'
response = requests.get(url_3)
soup = BeautifulSoup(response.text, 'html.parser')
GLDAG_PHILHARMONIC = soup.find('td', {'id': 'price-inc-vat-per-unit-1'})
# Script: BULLIONBYPOST.CO.UK | Silver Philharmoic
global BBPAG_PHILHARMOIC
url_4 = 'https://www.bullionbypost.co.uk/silver-coins/austrian-philharmonic/2020-1oz-austrian-philharmonic-silver-coin/'
response = requests.get(url_4)
soup = BeautifulSoup(response.text, 'html.parser')
BBPAG_PHILHARMOIC = soup.find('td', {'id': 'price-inc-vat-per-unit-1'})
# Script: GOLD.CO.UK | Silver Maple
global GLDAG_MAPLE
url_5 = 'https://www.gold.co.uk/silver-coins/candian-silver-maple-coins/1oz-canadian-maple-silver-coin-2020/'
response = requests.get(url_5)
soup = BeautifulSoup(response.text, 'html.parser')
GLDAG_MAPLE = soup.find('td', {'id': 'price-inc-vat-per-unit-1'})
# Script: BULLIONBYPOST.CO.UK | Silver Maple
global BBPAG_MAPLE
url_6 = 'https://www.bullionbypost.co.uk/silver-coins/britannia-silver-ounce/1oz-silver-britannia-best-value/'
response = requests.get(url_6)
soup = BeautifulSoup(response.text, 'html.parser')
BBPAG_MAPLE = soup.find('td', {'id': 'price-inc-vat-per-unit-1'})
time.sleep(60)
print(BBPAG_MAPLE)
print(BBPAG_PHILHARMOIC)
print(BBPAG_BRITANNIA)
print(GLDAG_MAPLE)
print(GLDAG_PHILHARMONIC)
print(GLDAG_BRITANNIA)
while True:
job()
我的建议是使用Ajax并为这些值创建一个REST Api。