Як працювати, коли веб-сторінка не завантажується на BeautifulSoup

Наразі, якщо виникла помилка під час завантаження веб-сторінки, суп не буде заповнено сторінкою, але отримає відсоток повернення за замовчуванням від beautifulsoup.

Я шукаю спосіб перевірити це, тому, якщо під час отримання веб-сторінки сталася помилка, я можу пропустити таку частину коду, як

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()
1

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)
2
додано
soup = getwebpage('http://doesnotexistblah.com/')
if soup is not None:
    soup = BeautifulSoup(soup)

Це те, що ти хочеш?

0
додано
Якщо ви просто return з getwebpage , це None .
додано Автор Chris Morgan, джерело
Так і ні, це те, що я хочу, але суп ніколи не буває, навіть при подачі поганої адреси ...
додано Автор Brad, джерело
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;