2013-11-15 4 views
0

주식 기호 데이터를 csv 파일로 스크랩하도록 코드를 작성하려고합니다. 그러나 다음 오류가 발생합니다.결합 된 예외 Beautiful Soup HTTPError가 정의되지 않음

Traceback (most recent call last): 
    File "company_data_v3.py", line 23, in <module> 
    page = urllib2.urlopen("http://finance.yahoo.com/q/ks?s="+newsymbolslist[i] +"%20Key%20Statistics").read() 
    File "C:\Python27\lib\urllib2.py", line 127, in urlopen 
    return _opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 410, in open 
    response = meth(req, response) 
    File "C:\Python27\lib\urllib2.py", line 523, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Python27\lib\urllib2.py", line 448, in error 
    return self._call_chain(*args) 
    File "C:\Python27\lib\urllib2.py", line 382, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\urllib2.py", line 531, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 400: Bad Request 

나는이 suggestion을 시도했지만이 프로그램에 urlib2 HTTPError을 수입하는 일을하지 않았다. (내가 이미 가지고 있기 때문에 모듈이 가져 왔다고 할 여분의 것

symbols.txt 파일이 주식 기호를 가지고 여기에 내가 사용하고있는 코드입니다..

import urllib2 
from BeautifulSoup import BeautifulSoup 
import csv 
import re 
import urllib 
from urllib2 import HTTPError 
# 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 
     try:  
      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 
     except (IndexError, urllib2.HTTPError) as e: 
      pass 
     i+=1  

내가 정의해야 함 ? 당신의 도움에 대해 더 구체적으로 감사를 오류 당신은 잘못된 위치에 예외를 잡고있다

답변

1

당신의 추적의 첫 번째 선으로 같이 urlopen() 호출이 예외를 throw :..

Traceback (most recent call last): 
    File "company_data_v3.py", line 23, in <module> 
    page = urllib2.urlopen("http://finance.yahoo.com/q/ks?s="+newsymbolslist[i] +"%20Key%20Statistics").read() 

거기에 캐치하십시오 :

while i<len(newsymbolslist): 
    try: 
     page = urllib2.urlopen("http://finance.yahoo.com/q/ks?s="+newsymbolslist[i] +"%20Key%20Statistics").read() 
    except urllib2.HTTPError: 
     continue 
+0

나는 제안한 코드를 시도하고 들여 쓰기 오류가 발생합니다. 나는 그것이 간단한 문제임을 안다. 스프와 name_company 변수는 어떻게 수정합니까? for 루프에 넣어야합니까? –

+1

나머지는'soup ='이후부터 코드와 같은 들여 쓰기 수준에 따라옵니다. 그래서'try :'문과 일치하게됩니다. –