0

私はPythonが初めてで、インスタンスをリストに追加して単純なクラスを実装しようとしています。エラー 'KeyError:0' が表示されます。ファイル 'element.py' にスローされています。

def __getitem__(self, key):
        """tag[key] returns the value of the 'key' attribute for the tag,
        and throws an exception if it's not there."""
        return self.attrs[key]

これが私のクラス定義とそれへのその後の呼び出しです (ちなみに、コードが冗長で非 pythonic である可能性が高いことはわかっています。「python の新しい」の「新しい」は十分に強調することはできません。):

def main():
    pass

if __name__ == '__main__':
    main()

import urllib.request
import datetime
from bs4 import BeautifulSoup

class EarningsAnnouncement:
    def __init__(self, Company, Ticker, EPSEst, AnnouncementDate, AnnouncementTime):
        self.Company = Company
        self.Ticker = Ticker
        self.EPSEst = EPSEst
        self.AnnouncementDate = AnnouncementDate
        self.AnnouncementTime = AnnouncementTime


webBaseStr = 'http://biz.yahoo.com/research/earncal/'
earningsAnnouncements = []

for dte in range(1, 30):
    dayVar = datetime.date.today()
    #currDay = str(dayVar.day)
    currDay = '22' #for debugging purposes
    currMonth = str(dayVar.month)
    currYear = str(dayVar.year)
    if (len(currDay)==1): currDay = '0' + currDay
    if (len(currMonth)==1): currMonth = '0' + currMonth
    dateStr = currYear + currMonth + currDay
    webString = webBaseStr + dateStr + '.html'
    with urllib.request.urlopen(webString) as url: page = url.read()
    soup = BeautifulSoup(page)
    tbls = soup.findAll('table')
    tbl6= tbls[6]
    rows = tbl6.findAll('tr')
    rows = rows[2:]
    for earn in rows:
        earningsAnnouncements.append(EarningsAnnouncement(earn[0], earn[1], earn[3], dateStr, earn[3]))
4

1 に答える 1

2
for earn in rows:
        earningsAnnouncements.append(EarningsAnnouncement(earn[0], earn[1], earn[3], dateStr, earn[3]))

earnHTML 内の要素とその子孫を表すtagオブジェクトです。trまた、タグの属性[]にアクセスするには、タグの を使用します。例えば:

>>> soup = BeautifulSoup('<tr class="hello">aaa</tr><tr>bbb</tr>')
>>> trs = soup.find_all('tr')
>>> trs[0]['class']
['hello']
>>>

名前が付けられた属性がない0ため、KeyError が発生しました。タグの内容にアクセスしたい場合は、 を使用する必要がありますearn.contents[0]

于 2013-07-20T18:27:53.847 に答える