찾다
백엔드 개발파이썬 튜토리얼[Python] 웹 크롤러(4): Opener와 Handler의 소개와 실제 응용

다음 콘텐츠를 시작하기 전에 먼저 urllib2의 두 가지 메소드인 info 및 geturl을 설명하겠습니다.

urlopen이 반환한 응답 개체 response(또는 HTTPError 인스턴스)에는 매우 유용한 두 가지 메소드 info() 및 geturl( )

1.geturl():

이것은 얻은 실제 URL을 반환합니다. urlopen(또는 오프너 개체가 사용하는 것)이 리디렉션이 있을 수 있기 때문에 매우 유용합니다. 획득한 URL은 요청 URL과 다를 수 있습니다.

Renren의 하이퍼링크를 예로 들어 보겠습니다.


원래 URL과 리디렉션된 링크를 비교하기 위해 urllib2_test10.py를 빌드합니다.

from urllib2 import Request, urlopen, URLError, HTTPError  
  
  
old_url = 'http://rrurl.cn/b1UZuP'  
req = Request(old_url)  
response = urlopen(req)    
print 'Old url :' + old_url  
print 'Real url :' + response.geturl()

실행 후 실제 링크가 가리키는 URL을 볼 수 있습니다:

[Python] 웹 크롤러(4): Opener와 Handler의 소개와 실제 응용

2.info():

이것은 다음의 사전을 반환합니다. 객체 객체, 이 사전은 획득된 페이지 상황을 설명합니다. 일반적으로 서버에서 보낸 특정 헤더입니다. 현재 httplib.HTTPMessage의 인스턴스입니다.

기본 헤더에는 "콘텐츠 길이", "콘텐츠 유형" 및 기타 콘텐츠가 포함됩니다.


info 적용을 테스트하기 위해 urllib2_test11.py를 빌드합니다.

from urllib2 import Request, urlopen, URLError, HTTPError  
  
old_url = 'http://www.baidu.com'  
req = Request(old_url)  
response = urlopen(req)    
print 'Info():'  
print response.info()

작업 결과는 다음과 같습니다. 페이지 관련 정보 :

[Python] 웹 크롤러(4): Opener와 Handler의 소개와 실제 응용

urllib2의 두 가지 중요한 개념인 Openers와 Handlers에 대해 이야기해 보겠습니다.

1.Openers:

URL을 얻을 때 오프너(urllib2.OpenerDirector의 인스턴스)를 사용합니다.

일반적으로 우리는 urlopen을 통해 기본 오프너를 사용합니다.

하지만 자신만의 오프너를 만들 수 있습니다.

2.핸들:

오프너는 프로세서 핸들러를 사용하며 모든 "무거운" 작업은 핸들러에 의해 처리됩니다.

각 핸들러는 특정 프로토콜을 통해 URL을 여는 방법이나 URL 열기의 다양한 측면을 처리하는 방법을 알고 있습니다.

HTTP 리디렉션 또는 HTTP 쿠키 등.


특정 핸들러로 URL을 얻으려면 오프너를 생성해야 합니다. 예를 들어 쿠키를 처리하는 오프너를 얻거나 쿠키를 처리하지 않는 오프너를 얻습니다. 리디렉션.


오프너를 생성하려면 OpenerDirector

를 인스턴스화한 다음 .add_handler(some_handler_instance)를 호출하세요.

마찬가지로, 오프너 객체를 생성하는 데 더 편리한 함수인 build_opener를 사용할 수 있습니다. 함수 호출은 하나만 필요합니다.
build_opener는 기본적으로 여러 프로세서를 추가하지만 기본 프로세서를 추가하거나 업데이트하는 빠른 방법을 제공합니다.

프록시, 유효성 검사 및 기타 일반적이지만 다소 특별한 경우를 처리할 수 있는 다른 핸들러입니다.


install_opener는 (전역) 기본 오프너를 만드는 데 사용됩니다. 즉, urlopen을 호출하면 설치된 오프너가 사용됩니다.

Opener 객체에는 open 메소드가 있습니다.

이 방법은 urlopen 함수와 같이 URL을 얻는 데 직접 사용할 수 있습니다. 편의상 일반적으로 install_opener를 호출할 필요는 없습니다.


위의 두 가지 내용을 모두 마친 후, 위에서 언급한 Opener와 Handler가 사용될 기본 인증 내용을 살펴보겠습니다.

기본 인증

핸들러 생성 및 설치를 보여주기 위해 HTTPBasicAuthHandler를 사용하겠습니다.

기본 인증이 필요한 경우 서버에서는 헤더(401 오류 코드)를 전송하여 인증을 요청합니다. 이는 체계와 '영역'을 지정하며 다음과 같습니다. Www-authenticate: SCHEME realm="REALM".


Www-authenticate: Basic realm="cPanel Users"

클라이언트는 새 요청을 사용해야 하며 요청 헤더에 올바른 이름과 비밀번호를 포함해야 합니다.

이것은 "기본 인증"입니다. 이 프로세스를 단순화하기 위해 HTTPBasicAuthHandler의 인스턴스를 생성하고 오프너가 이 핸들러를 사용하도록 할 수 있습니다.


HTTPBasicAuthHandler는 비밀번호 관리 개체를 사용하여 URL과 영역을 처리하고 사용자 이름과 비밀번호를 매핑합니다.

서버에서 보낸 헤더에 있는 영역이 무엇인지 알고 있다면 HTTPPasswordMgr을 사용할 수 있습니다.


보통 사람들은 영역이 무엇인지 관심이 없습니다. 이 경우 편리한 HTTPPasswordMgrWithDefaultRealm을 사용할 수 있습니다.

이렇게 하면 URL의 기본 사용자 이름과 비밀번호가 지정됩니다.

특정 렐름에 대해 다른 조합을 제공할 경우 제공됩니다.

add_password에 제공된 영역 매개변수에 None을 지정하여 이러한 상황을 나타냅니다.


가장 높은 수준의 URL이 가장 먼저 확인이 필요한 URL입니다. .add_password()에 전달하는 더 깊은 URL도 똑같이 적합합니다.

말도 안 되는 말을 너무 많이 했는데 위에서 말한 내용을 예시를 통해 보여드리겠습니다.


정보 애플리케이션을 테스트하기 위해 urllib2_test12.py를 빌드합니다.

# -*- coding: utf-8 -*-  
import urllib2  
  
# 创建一个密码管理者  
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()  
  
# 添加用户名和密码  
  
top_level_url = "http://example.com/foo/"  
  
# 如果知道 realm, 我们可以使用他代替 ``None``.  
# password_mgr.add_password(None, top_level_url, username, password)  
password_mgr.add_password(None, top_level_url,'why', '1223')  
  
# 创建了一个新的handler  
handler = urllib2.HTTPBasicAuthHandler(password_mgr)  
  
# 创建 "opener" (OpenerDirector 实例)  
opener = urllib2.build_opener(handler)  
  
a_url = 'http://www.baidu.com/'  
  
# 使用 opener 获取一个URL  
opener.open(a_url)  
  
# 安装 opener.  
# 现在所有调用 urllib2.urlopen 将用我们的 opener.  
urllib2.install_opener(opener)

참고: 위의 예에서는 HHTTPasicAuthHandler만 build_opener에 제공합니다.

기본 오프너에는 ProxyHandler, UnknownHandler, HTTPHandler, HTTPDefaultErrorHandler, HTTPRedirectHandler, FTPHandler, FileHandler, HTTPErrorProcessor와 같은 일반 핸들러가 있습니다.

코드의 top_level_url은 실제로 완전한 URL("http:", 호스트 이름 및 선택적 포트 번호 포함)일 수 있습니다.


예: http://example.com/.

은 "권한"(예: 호스트 이름 및 선택적으로 포트 번호)일 수도 있습니다.

예: "example.com" 또는 "example.com:8080".

후자는 포트 번호를 포함합니다.

위는 [Python] Web Crawler(4)의 내용입니다: Opener와 Handler의 소개 및 예제 적용에 대한 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고하시기 바랍니다. !


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Python vs. C : 응용 및 사용 사례가 비교되었습니다Python vs. C : 응용 및 사용 사례가 비교되었습니다Apr 12, 2025 am 12:01 AM

Python은 데이터 과학, 웹 개발 및 자동화 작업에 적합한 반면 C는 시스템 프로그래밍, 게임 개발 및 임베디드 시스템에 적합합니다. Python은 단순성과 강력한 생태계로 유명하며 C는 고성능 및 기본 제어 기능으로 유명합니다.

2 시간의 파이썬 계획 : 현실적인 접근2 시간의 파이썬 계획 : 현실적인 접근Apr 11, 2025 am 12:04 AM

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

파이썬 : 기본 응용 프로그램 탐색파이썬 : 기본 응용 프로그램 탐색Apr 10, 2025 am 09:41 AM

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 ​​같은 작업에 적합합니다.

2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?2 시간 안에 얼마나 많은 파이썬을 배울 수 있습니까?Apr 09, 2025 pm 04:33 PM

2 시간 이내에 파이썬의 기본 사항을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우십시오. 이를 통해 간단한 파이썬 프로그램 작성을 시작하는 데 도움이됩니다.

10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?10 시간 이내에 프로젝트 및 문제 중심 방법에서 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법?Apr 02, 2025 am 07:18 AM

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?중간 독서를 위해 Fiddler를 사용할 때 브라우저에서 감지되는 것을 피하는 방법은 무엇입니까?Apr 02, 2025 am 07:15 AM

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Python 3.6에 피클 파일을로드 할 때 '__builtin__'모듈을 찾을 수없는 경우 어떻게해야합니까?Apr 02, 2025 am 07:12 AM

Python 3.6에 피클 파일로드 3.6 환경 보고서 오류 : modulenotfounderror : nomodulename ...

경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?경치 좋은 스팟 코멘트 분석에서 Jieba Word 세분화의 정확성을 향상시키는 방법은 무엇입니까?Apr 02, 2025 am 07:09 AM

경치 좋은 스팟 댓글 분석에서 Jieba Word 세분화 문제를 해결하는 방법은 무엇입니까? 경치가 좋은 스팟 댓글 및 분석을 수행 할 때 종종 Jieba Word 세분화 도구를 사용하여 텍스트를 처리합니다 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.