Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 改进标签列表,以便与熊猫上的晨星一起使用_Python_Pandas_Morningstar - Fatal编程技术网

Python 改进标签列表,以便与熊猫上的晨星一起使用

Python 改进标签列表,以便与熊猫上的晨星一起使用,python,pandas,morningstar,Python,Pandas,Morningstar,所以我有一个标签列表,是我从纳斯达克网站上为纽约证券交易所刮下来的 import urllib.request from bs4 import BeautifulSoup import re target = "NYSE" def nyseTags(): ret = [] for k in range(1,64): source = "https://www.nasdaq.com/screening/companies-by-industry.aspx?exc

所以我有一个标签列表,是我从纳斯达克网站上为纽约证券交易所刮下来的

import urllib.request
from bs4 import BeautifulSoup
import re

target = "NYSE"

def nyseTags():
    ret = []
    for k in range(1,64):
        source = "https://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&page="+str(k)
        print("ReadingPage:"+source)
        filehandle = urllib.request.urlopen(source)
        soup = BeautifulSoup(filehandle.read(), "html.parser")
        lines = soup.findAll("tr",{})
        #print(len(lines))
        temp = []
        for n,k in enumerate(lines):
            if(n == 0):
                continue
            try:
                tds = k.findAll("td",{})                
                pattern = re.compile(r'\s+')
                temp.append(re.sub(pattern, '', tds[1].getText()))
                print(str(n)+" : "+temp[-1])
            except:
                pass
        ret += temp
    return(ret)

def arrToCsv(arr,fn):
    strRep = "\n".join(arr)
    fh = open(fn,"w")
    fh.write(strRep)
    fh.close()

arrToCsv(nyseTags(),"nyseTags.lst")
这提供了我的初始列表:

DDD
MMM
WBAI
...
XOXO
XPO
XYL
AUY
YELP
YEXT
YRD
YPF
YUMC
YUM
ZAYO
ZEN
ZBH
ZB^A
ZB^G
ZB^H
ZBK
ZOES
ZTS
ZTO
ZUO
ZYME
现在我知道,这些标签并不都是符合我需要的
好的
标签,因为我希望能够访问2年的日间窗口

因此,我编写了下面的脚本来过滤掉我两年前无法获取数据的标签,但这看起来是一个有希望的开始

我不知道为什么这个脚本无法遍历整个列表,但任何输入都将非常棒

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
import os
import operator
#C:\Users\Kevin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas_datareader\fred.py

style.use('ggplot')
__NOW__ = dt.datetime.now()
__2YearsAgo1__ = __NOW__ - dt.timedelta(days=725)
__2YearsAgo__ = __NOW__ - dt.timedelta(days=731)

def fetch(tag,start,end):# start and end should be dt.datetime(), tag can be a string or array of strings
    if(type(tag) == str):
        df = web.DataReader(tag, 'morningstar', start, end)
        return(df)
    else:
        df = web.DataReader(tag, 'morningstar', start, end)
        ret = {}
        for tag, data in df.groupby(level=0):
            if(type(data)==pd.core.frame.DataFrame):
                ret[tag]=data
        return(ret)

def scrubTags(tagList):
    ret = []
    fails = []
    for n in range(0,int(len(tagList)/25)+1):
        if(n==len(tagList)/25):
            propTags = tagList[n*25:len(tagList)]
        else:
            propTags = tagList[n*25:n*25+25]
        try:
            temp = fetch(propTags,__2YearsAgo__,__2YearsAgo1__)
            ret += propTags
            print(str(n))
        except:
            print("Error in:"+"\t".join(propTags))
            for k in propTags:
                try:
                    temp = fetch(k,__2YearsAgo__,__2YearsAgo1__)
                    print("Passed:"+k)
                    ret.append(k)
                except:
                    fails.append(k)
                    print("Failed:"+k)
            #fails += propTags
    return((ret,fails))

def arrToCsv(arr,fn):
    strRep = "\n".join(arr)
    fh = open(fn,"w")
    fh.write(strRep)
    fh.close()

def loadNYSEtagList():
    fh = open("NYSETags.lst","r")
    text = fh.read()
    fh.close()
    return(text.split("\n"))

tagList = loadNYSEtagList()
scrubTags = scrubTags(tagList)
arrToCsv(scrubTags[0],"Scrubed_505_nyseTags.lst")
arrToCsv(scrubTags[1],"Failed_505_nyseTags.lst")

另外->我知道用一个满是数据帧的字典来代替多索引是很奇怪的,但我不认为这是我问题的原因。

它是否挂起了抓取?您在网站上是否超过了速率限制?此外,您正在尝试遍历for循环中的列表块。也许这里面有逻辑错误?我从来没有这样做的必要,但我认为必须有一种更为通灵的方式,因为这似乎是一个常见的问题。使用经过验证的代码可能会有所帮助。我的第一个搜索结果是:是的,我想我的分块检查出来了,尽管它可能很难看。。。为了检查我是否超过了速度限制,我在每次查询之前添加了一个5秒的计时器,但它仍然挂在同一个位置。5秒可能不够。它总是挂在同一个地方吗?那可能不是网站。你没有说它挂在哪里……如果不是因为web阅读器挂了,也许你得到了巨大的响应,而df.groupby花的时间太长了。与其这样做,不如打印df的大小/长度,看看是否有效。