-2

Web サイトから 7 つのデータを取得し、AAPL や NFLX など、symbols.txt ファイル内の会社ごとに csv ファイルに書き込むプログラムを作成しています。私の問題は、スクリプトを機能させるためにインデックスを混乱させたことが原因のようです。どのように適合するか途方に暮れています。この形ならいけると思ったのに…

import urllib2
from BeautifulSoup import BeautifulSoup
import csv
import re
import urllib
# import modules

symbolfile = open("symbols.txt")
symbolslist = symbolfile.read()
newsymbolslist = symbolslist.split("\n")

i = 0

f = csv.writer(open("pe_ratio.csv","wb"))
# short cut to write

f.writerow(["Name","PE","Revenue % Quarterly","ROA% YOY","Operating Cashflow","Debt to Equity"])
#first write row statement

# define name_company as the following
while i<len(newsymbolslist):
    page = urllib2.urlopen("http://finance.yahoo.com/q/ks?s="+newsymbolslist[i] +"%20Key%20Statistics").read()
    soup = BeautifulSoup(page)
    name_company = soup.findAll("div", {"class" : "title"}) 
    for name in name_company: #add multiple iterations?     
        all_data = soup.findAll('td', "yfnc_tabledata1")
        stock_name = name.find('h2').string #find company's name in name_company with h2 tag
        f.writerow([stock_name, all_data[2].getText(),all_data[17].getText(),all_data[13].getText(), all_data[29].getText(),all_data[26].getText()]) #write down PE data
    i+=1    

コードをそのまま実行しようとすると、次のエラーが表示されます。

Traceback (most recent call last):
  File "company_data_v1.py", line 28, in <module>
    f.writerow([stock_name, all_data[2].getText(),all_data[17].getText(),all_data[13].getText(), all_data[29].getText()
all_data[26].getText()]) #write down PE data
IndexError: list index out of range

事前にご協力いただきありがとうございます。

4

2 に答える 2

1

「スクリプトを機能させるために変数を配置する場所」と言ったとき、この「スープ」変数を参照していたと思いますか?あなたのエラーメッセージにあるものですか?

その場合は、soup.findAll() で使用する前に「soup」を宣言することをお勧めします。ご覧のとおり、 soup.findAll()の 1 行後に、soup = BeautifulSoup(page) を宣言しました。その上に行くべきです。

于 2013-11-03T06:10:31.200 に答える