2011-10-27 8 views
1

現在、Webページの取得中にエラーが発生した場合、スープにはページが表示されませんが、beautifulsoupからのデフォルトの戻り値を取得します。WebページがBeautifulSoupにロードされない場合の処理​​方法

私は、Webページを取得中にエラーがあれば、私は

if soup: 
    do stuff 

ようなコードの塊をスキップすることができますが、私は一緒にすべて終了したくないようにこれをチェックする方法を探しています。初心者のお誘いのためのお申し込み。

def getwebpage(address): 
    try: 
     user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
     headers = { 'User-Agent' : user_agent } 
     req = urllib2.Request(address, None, headers) 
     web_handle = urllib2.urlopen(req) 
    except urllib2.HTTPError, e: 
     error_desc = BaseHTTPServer.BaseHTTPRequestHandler.responses[e.code][0] 
     appendlog('HTTP Error: ' + str(e.code) + ': ' + address) 
     return 
    except urllib2.URLError, e: 
     appendlog('URL Error: ' + e.reason[1] + ': ' + address) 
     return 
    except: 
     appendlog('Unknown Error: ' + address) 
     return 
    return web_handle 


def test(): 
    soup = BeautifulSoup(getwebpage('http://doesnotexistblah.com/')) 
    print soup 

    if soup: 
    do stuff 

test() 

答えて

2

構造コードつの機能は、URLからのデータ取得のプロセス全体をカプセル化し、そのデータの処理をカプセル化している別のように:

import urllib2, httplib 
from BeautifulSoup import BeautifulSoup 

def append_log(message): 
    print message 

def get_web_page(address): 
    try: 
     user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' 
     headers = { 'User-Agent' : user_agent } 
     request = urllib2.Request(address, None, headers) 
     response = urllib2.urlopen(request, timeout=20) 
     try: 
      return response.read() 
     finally: 
      response.close() 
    except urllib2.HTTPError as e: 
     error_desc = httplib.responses.get(e.code, '') 
     append_log('HTTP Error: ' + str(e.code) + ': ' + 
        error_desc + ': ' + address) 
    except urllib2.URLError as e: 
     append_log('URL Error: ' + e.reason[1] + ': ' + address) 
    except Exception as e: 
     append_log('Unknown Error: ' + str(e) + address) 

def process_web_page(data): 
    if data is not None: 
     print BeautifulSoup(data) 
    else: 
     pass # do something else 

data = get_web_page('http://doesnotexistblah.com/') 
process_web_page(data) 

data = get_web_page('http://docs.python.org/copyright.html') 
process_web_page(data) 
0
soup = getwebpage('http://doesnotexistblah.com/') 
if soup is not None: 
    soup = BeautifulSoup(soup) 

あなたが希望しているものということですか?

+0

はいといいえ、それは私が欲しいものであるが、スープあなたが悪いアドレスを与えたときでも、決してNoneではありません... – Brad

+0

'getwebpage'からちょうど' return'をすると 'None'です。 –

関連する問題