왜 urllib2로 urllib2.httperror를 얻고 urllib의 오류가 없습니까?
문제
다음과 같은 간단한 코드가 있습니다.
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 어쨌든 이 게시물은 서버에서 자세한 오류 메시지를 얻는 몇 가지 좋은 방법을 보여줍니다.
제휴하지 않습니다 StackOverflow