返回 ETF 的符号列表
Posted
技术标签:
【中文标题】返回 ETF 的符号列表【英文标题】:return a list of symbols of an ETF 【发布时间】:2020-07-31 06:17:58 【问题描述】:我想编写一个函数,输入 ETF 的符号,该函数返回其组件的符号列表。
该功能几乎就在那里,但有一个问题:我不知道为什么 get_table()
行返回错误,并且此代码仅打开我的 Chrome 浏览器,但没有返回应有的 pd.DataFrame
对象。我想知道为什么会发生这种情况以及如何解决?
import pandas as pd
# from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
from bs4 import BeautifulSoup
def get_etf_holdings(etf_symbol):
url = 'https://www.barchart.com/stocks/quotes//constituents?page=all'.format(
etf_symbol)
# Loads the ETF constituents page and reads the holdings table
browser = WebDriver() # webdriver.PhantomJS()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'html')
table = get_table(soup)
# Reads the holdings table line by line and appends each asset to a
# dictionary along with the holdings percentage
asset_dict =
for row in table.select('tr')[1:-1]:
try:
cells = row.select('td')
# print(row)
symbol = cells[0].get_text().strip()
# print(symbol)
name = cells[1].text.strip()
celltext = cells[2].get_text().strip()
percent = float(celltext.rstrip('%'))
shares = int(cells[3].text.strip().replace(',', ''))
if symbol != "" and percent != 0.0:
asset_dict[symbol] =
'name': name,
'percent': percent,
'shares': shares,
except BaseException as ex:
print(ex)
browser.quit()
return pd.DataFrame(asset_dict)
【问题讨论】:
get_table(...)
函数在哪里?
【参考方案1】:
条形图网站很可能会阻止机器人访问以执行其使用条款。要测试和调试代码本身,最好访问更灵活的网站。
【讨论】:
以上是关于返回 ETF 的符号列表的主要内容,如果未能解决你的问题,请参考以下文章