문제

다음과 같은 간단한 코드가 있습니다.

import urllib2
import sys
sys.path.append('../BeautifulSoup/BeautifulSoup-3.1.0.1')
from BeautifulSoup import *
page='http://en.wikipedia.org/wiki/Main_Page'
c=urllib2.urlopen(page)

이 코드는 다음 오류 메시지를 생성합니다.

    c=urllib2.urlopen(page)
  File "/usr/lib64/python2.4/urllib2.py", line 130, in urlopen
    return _opener.open(url, data)
  File "/usr/lib64/python2.4/urllib2.py", line 364, in open
    response = meth(req, response)
  File "/usr/lib64/python2.4/urllib2.py", line 471, in http_response
    response = self.parent.error(
  File "/usr/lib64/python2.4/urllib2.py", line 402, in error
    return self._call_chain(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.4/urllib2.py", line 480, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 403: Forbidden

그러나 urllib2를 urllib로 바꾸면 오류 메시지가 없습니다. 아무도이 행동을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

원래 urllib 단순히 403 코드에서는 예외를 제기하지 않습니다. 추가하면 print c.getcode() 프로그램의 마지막 줄에 urllib 그것을 도달하고 여전히 403을 인쇄합니다.

그렇다면 print c.read() 결국, 당신은 실제로 Wikipedia에서 오류 페이지를 얻었음을 알 수 있습니다. 그것은 단지 문제입니다 urllib2 오류 403을 런타임 예외로 처리하기로 결정 urllib 여전히 오류 403을 얻은 다음 페이지로 무언가를 할 수 있습니다.

다른 팁

Wikipedia는 urllib2의 기본 사용자 에이전트를 필터링하는 것 같습니다. 그냥 바꾸십시오.

Urllib2.httperror 또는 urllib.error.httperror를 우선시하고 읽기 응답 html 어쨌든 이 게시물은 서버에서 자세한 오류 메시지를 얻는 몇 가지 좋은 방법을 보여줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top