F5를 누르면 인쇄된 내용을 볼 수 있습니다: [Errno 11001] getaddrinfo failed
즉, 에러번호는 11001이고 내용은 getaddrinfo failed
2.HTTPError
서버의 각 HTTP 응답 개체 응답에는 숫자로 된 "상태 코드"가 포함되어 있습니다.
때때로 상태 코드는 서버가 요청을 완료할 수 없음을 나타냅니다. 기본 핸들러는 이 응답의 일부를 처리합니다.
예: 응답이 "리디렉션"이고 클라이언트가 다른 주소에서 문서를 가져와야 하는 경우 urllib2가 이를 처리합니다.
처리할 수 없는 기타 항목은 urlopen에서 HTTPError를 생성합니다.
일반적인 오류에는 '404'(페이지를 찾을 수 없음), '403'(요청이 금지됨), '401'(확인된 요청)이 포함됩니다.
HTTP 상태 코드는 HTTP 프로토콜에서 반환된 응답의 상태를 나타냅니다.
예를 들어 클라이언트가 서버에 요청을 보내는 경우 요청한 리소스를 성공적으로 가져오면 반환되는 상태 코드는 200이며 이는 응답이 성공했음을 나타냅니다.
요청한 리소스가 존재하지 않으면 일반적으로 404 오류가 반환됩니다.
HTTP 상태 코드는 일반적으로 5가지 유형으로 나뉘는데, 1부터 5까지의 5개 숫자로 시작하고 3자리 정수로 구성됩니다.
------------------------------------- -------------------------------------
200: 요청 성공 처리 방법: 응답 내용을 가져와서 처리
201: 요청이 완료되었으며, 결과적으로 새로운 리소스가 생성됩니다. 새로 생성된 리소스의 URI는 응답 엔터티에서 얻을 수 있습니다. 처리 방법: 크롤러에서 발견되지 않습니다.
202: 요청이 수락되었지만 처리되지 않았습니다. 아직 완료되지 않았습니다. 처리 방법: 차단 및 대기
204: 서버가 요청을 이행했지만 새로운 정보가 반환되지 않았습니다. 클라이언트가 사용자 에이전트인 경우 이 목적을 위해 자체 문서 보기를 업데이트할 필요가 없습니다. 처리 방법: 폐기
300: 이 상태 코드는 HTTP/1.0 애플리케이션에서 직접 사용되지 않지만 3XX 유형 응답의 기본 해석으로만 사용됩니다. 요청된 리소스가 여러 개 있습니다. 처리 방법: 프로그램에서 처리할 수 있으면 추가 처리합니다. 프로그램에서 처리할 수 없으면 폐기합니다.
301: 요청한 리소스에 영구 URL이 할당되므로 이 리소스는 향후 이 URL을 통해 접근 가능합니다. 처리 방법: 할당된 URL
으로 리디렉션 302: 요청한 리소스를 다른 URL에 임시 저장합니다. 처리 방법: 임시 URL
으로 리디렉션합니다.304 요청한 리소스가 업데이트되지 않았습니다. 처리 방법: 폐기
400 잘못된 요청 처리 방법: 폐기
401 무단 처리방법 : 폐기
403 금지 처리방법 : 폐기
404 찾을 수 없음 처리방법 : 폐기
5XX "5"로 시작하는 상태 코드는 서버에서 오류가 발견되어 요청을 계속 실행할 수 없음을 나타냅니다. 처리 방법: 폐기
---------------------------- -------- ---------------- -------- ---
HTTPError 인스턴스가 생성된 후 서버에서 보낸 관련 오류 번호인 정수 'code' 속성이 있습니다. .
오류 코드 오류 코드
기본 프로세서가 리디렉션(300 이외의 숫자)을 처리하고 100-299 범위의 숫자는 성공을 나타내기 때문에 오류 번호만 볼 수 있습니다. 400-599.
BaseHTTPServer.BaseHTTPRequestHandler.response는 HTTP 프로토콜에서 사용되는 모든 응답 번호를 표시하는 매우 유용한 응답 번호 사전입니다.
오류 번호가 생성되면 서버는 HTTP 오류 번호와 오류 페이지를 반환합니다.
페이지에서 반환된 응답 개체 응답으로 HTTPError 인스턴스를 사용할 수 있습니다.
이는 error 속성과 마찬가지로 read, geturl 및 info 메소드도 포함한다는 의미입니다.
이를 경험해 보기 위해 urllib2_test07.py를 빌드해 보겠습니다.
[파이썬] 보기
일반 사본
- 가져오기 urllib2
- req = urllib2.Request( 'http://bbs.csdn.net/callmewhy')
-
- 시도해 보세요:
- urllib2.urlopen(req)
-
- 제외 urllib2.URLError, e:
-
- 인쇄 e.code
- #print e.read()
F5를 누르면 404에러코드가 출력되는 것을 볼 수 있는데 이는 이 페이지를 찾을 수 없다는 뜻입니다.
3.Wrapping
따라서 HTTPError 또는 URLError에 대비하려면 기본적으로 두 가지 방법이 있습니다. . 두 번째 것을 사용하는 것이 좋습니다.
첫 번째 예외 처리를 보여주기 위해 urllib2_test08.py를 빌드해 보겠습니다.
[python] 보기
일반 사본
- from urllib2 import Request, urlopen, URLError, HTTPError
-
-
요청 = 요청('http://bbs.csdn.net/callmewhy')
-
- 시도:
-
- 응답 = urlopen(req)
-
- 제외 HTTPError , e:
-
- 인쇄 '서버가 요청을 이행하지 마세요.'
-
- 인쇄 '오류 코드: ', e.code
-
- 제외 URLError, e:
-
- 인쇄 '서버에 연결하지 못했습니다.'
-
- 인쇄 '이유: ', e.reason
-
- 그 외:
- 인쇄 '예외 없음 '
- # 모든 것이 괜찮습니다
그리고 其他语言似, try저지后捕获异常并且将其内容打印판매来。这里要注의미있는 일点,HTTPError를 제외하고 必须在第一个,否则URLError将同样接受到HTTPError.因为
HTTPError是URLError的子类,如果URLError前面它会捕捉到所有的URLError(包括HTTPError ) 。
我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:
[python] 보기
일반 사본
- from urllib2 import Request, urlopen, URLError, HTTPError
-
-
요청 = 요청('http://bbs.csdn.net/callmewhy')
-
- 시도:
-
- 응답 = urlopen(req)
-
- 제외 URLError , e:
-
- if hasattr(e, '코드'):
-
- 인쇄 '서버가 요청을 처리할 수 없습니다.'
-
- 인쇄 '오류 코드: ', e.code
-
- elif hasattr(e, '이유'):
-
- 인쇄 '서버에 연결하지 못했습니다.'
-
- 인쇄 '이유: ', e .이유
-
-
- 그밖에:
- 인쇄 '예외가 발생하지 않았습니다.'
- # 모든 것이 괜찮습니다
以上就介绍了[Python]网络爬虫(三): 异常적 분석과 HTTP状态码적 분배, 包括了방면적 内容, 希望对PHP教程有兴趣的朋友多所帮助。