2013-07-20 3 views
2

필자는 유사한 문제에 대해 수십 가지 예제를 읽었지 만 필자가 본 솔루션이나 그 변형을 실행할 수는 없습니다. 나는 화면 긁어 모으고, 나는 단지 404 오류 (페이지 건너 뛰기)를 무시하고 싶다. 내가 얻을urllib에서 404 오류를 어떻게 잡을 수 있습니까? (파이썬 3)

'AttributeError :'module '객체에'HTTPError '속성이 없습니다.

'URLError'도 시도했습니다. 거의 동일한 구문이 응답으로 받아 들여지는 것을 보았습니다. 어떤 아이디어? 여기에 내가있어 무엇 : 예외가 urllib.error.HTTPError하지 urllib.HTTPError입니다

import urllib 
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 = [] 
dayVar = datetime.date.today() 
for dte in range(1, 30): 
    currDay = str(dayVar.day) 
    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' 
    try: 
     #with urllib.request.urlopen(webString) as url: page = url.read() 
     page = urllib.request.urlopen(webString).read() 
     soup = BeautifulSoup(page) 
     tbls = soup.findAll('table') 
     tbl6= tbls[6] 
     rows = tbl6.findAll('tr') 
     rows = rows[2:len(rows)-1] 
     for earn in rows: 
      earningsAnnouncements.append(EarningsAnnouncement(earn.contents[0], earn.contents[1], 
      earn.contents[3], dateStr, earn.contents[3])) 
    except urllib.HTTPError as err: 
     if err.code == 404: 
      continue 
     else: 
      raise 

    dayVar += datetime.timedelta(days=1) 

답변

7

그것은 URLLIB에 대한 (안 urllib2가) 같다고. 자세한 내용은 documentation을 참조하십시오.

+0

감사합니다. Kyle ...하지만, 'module'객체에 'error'속성이 없습니다. – StatsViaCsh

+0

'urllib.error' 모듈을 명시 적으로 가져올 수 있습니까? – Kyle

+0

나는 사업을하고있다, 카일. 그리고 Bucks County에서는 btw. :) 고마워 – StatsViaCsh