我正在开发一个程序,可以解析来自多个网站的股票数据。我为每只股票使用的网站都是相同的,幸运的是,其中大多数都很容易生成 URL。
EX: 雅虎股票摘要页面 URL 为“https://finance.yahoo.com/quote/”+ticker+”?p="+ticker 我需要做的就是提示用户输入公司股票代码,我可以轻松生成一个可用的 URL 以使用 BeautifulSoup 进行解析
ticker = input("Enter Company Ticker:")
ticker = ticker.strip()
URLyahooSum = "https://finance.yahoo.com/quote/"+ticker+"?p="+ticker
print(URLyahooSum)
>>> https://finance.yahoo.com/quote/CBG?p=CBG
这部分很简单,我可以运行程序来解析用户输入的各个代码的数据,但是,现在我尝试将代码变量设置为等于一篮子代码,这些代码将在每个代码上运行程序篮子里有单独的股票代码,并将所有输出保存为不同的 .csv 文件,我可以将这些文件放入 SQL 数据库中,在那里我可以不断地对篮子里的公司从最好到最差进行排名。
我试图一次征服一个方面,所以现在我只关心如何告诉程序为篮子中的每个股票单独设置“股票代码”变量,并运行直到它到达最后一个股票行情。
我已经在 .csv 文件的数据库中拥有了我想要的一篮子公司股票代码,那么我如何告诉程序我希望“股票代码”等于这些公司中的每一个。并为每个股票运行该程序。
如果我理解正确,您应该从 CSV 文件读取数据而不是用户输入。
我假设您有一个简单的 CSV 文件,如下所示 [名为:a.csv];
company,ticker
CBRE Group,CBG
Advanced Micro Devices,AMD
The Boeing Company, BA
Eli Lilly and Company, LLY
Xerox Corporation, XRX
要从文件中接收每个代码,您需要以下代码。
import csv
with open('a.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['ticker'].strip())
脚本的结果
>>> CBG
>>> AMD
>>> BA
>>> LLY
>>> XRX
由于我们可以从文件中接收数据,因此这是脚本的最终版本:
import csv
with open('a.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
ticker = row['ticker'].strip()
URLyahooSum = "https://finance.yahoo.com/quote/"+ticker+"?p="+ticker
print(URLyahooSum)
这将为您提供以下输出:
>>> https://finance.yahoo.com/quote/CBG?p=CBG
>>> https://finance.yahoo.com/quote/AMD?p=AMD
>>> https://finance.yahoo.com/quote/BA?p=BA
>>> https://finance.yahoo.com/quote/LLY?p=LLY
>>> https://finance.yahoo.com/quote/XRX?p=XRX
如果您的列表中有股票代码
tickers_list
,您可以这样做
for ticker in tickers_list:
print("https://finance.yahoo.com/quote/"+ticker+"?p="+ticker)
这称为 foreach 循环,并且
ticker
变量将在整个循环迭代中获取列表中每个项目的值。
因此,如果 tickers_list = ['ABC', 'BBC', 'CBC']
,这将使 ticker
在第一次迭代时具有“ABC”值,然后在第二次迭代中具有“BBC”值,第三次迭代时具有“CBC”值。
我认为这对你来说可能更有用,因为你可能有一个函数需要一个已经准备好的字符串来使用:
base_string = "https://finance.yahoo.com/quote/%s?p=%s"
for ticker in tickers_list:
current_url = base_string % (ticker,ticker)
my_function(current_url)
这称为字符串格式化,字符串中有一个占位符,稍后将其填充。
%s
中的每个base_string
都需要一个变量来填充它,这就是为什么在制作current_url
时百分号后面跟着两个ticker
。