返回 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 的符号列表的主要内容,如果未能解决你的问题,请参考以下文章

numpy数组符号化与函数向量化

用 Python 机器学习预测黄金价格

go语言学习-return

计算返回时操作数类型错误

使用 Selenium 返回空 DataFrame 从网站抓取表格

利用akshare读取50EFF期权1