소위 웹 크롤링는, URL은 주소 지정된 네트워크 리소스를 로컬로 저장하기 위해 네트워크 스트림 출력에서 읽을이다. 파이썬에서, 웹을 크롤링하는 데 사용할 수있는 많은 도서관이 있습니다 urllib2库基本使用
.
urllib2가이 Python2.7 운반하는 모듈입니다 (더 다운로드, 가져올 수 있습니다)
urllib2가 공식 문서 : https://docs.python.org/2/library/urllib2.html
urllib2가 출처 : https://hg.python.org/cpython/file/2.7/Lib/urllib2.py
urllib2
그것은 python3.x 변경되었습니다urllib.request
urlopen
# 코딩. 8 = UTF- # 수입 urllib2가 라이브러리 가져 오기 urllib2가의 # 객체 반환 서버 응답 파일과 같은 특정 요청 URL을 보낼 응답 = urllib2.urlopen ( " http://www.cnblogs.com/loaderman/ " ) #을 이러한 읽기 () 메소드와 같은 동작 클래스 객체가 지원하는 파일 객체 파일, 파일 및 반환 문자열의 전체 내용을 읽어 HTML = response.read () #의 인쇄 문자열 인쇄 HTML을
쓰기 파이썬 코드는 결과를 인쇄한다
사실, "소스보기"를 선택하고 마우스 오른쪽 웹 페이지를보고, 당신은 찾아 정확히 같은 인쇄됩니다. 즉, 위의 코드 네 줄은 우리가 페이지를 아래로 올랐다 모든 코드를 돕고있다.
요청에 해당하는 기본 URL 파이썬 코드는 정말 매우 간단합니다.
의뢰
urlopen () 파라미터는 URL 주소이며;
당신은 HTTP 헤더를 추가하는 등보다 복잡한 작업을 수행해야하는 경우, 당신은 urlopen () 매개 변수로 요청 인스턴스를 생성해야하고 URL 주소는 요청 인스턴스로 필요한 매개 변수에 액세스 할 수 있습니다.
# 코딩. = UTF-8 오기 urllib2가 된 #의 URL 요청 () 메소드 파라미터 구조 복귀 요구 객체로서 요청 = urllib2.Request ( " http://www.cnblogs.com/loaderman/ " ) #에 urlopen 같이 요청 개체 매개 변수 () 메소드를 서버에 송신하고, 응답 수신 응답 = urllib2.urlopen (요구) HTML = response.read () 인쇄 HTML을
운영 결과는 정확히 동일합니다 :
새로운 요청 인스턴스는 외부에 추가하여이 URL 매개 변수를해야합니다에 두 개의 추가 매개 변수가 제공 될 수있다 :
데이터 (빈 기본이) : 데이터를 동반, 제출 URL (예를 들어, 데이터를 게시하기) "POST"방법 "GET"모드에서 요청 HTTP를하는 동안.
헤더 (빈 기본) : 전송되는 키 HTTP 헤더를 포함하는 사전입니다.
이 두 가지 매개 변수를 우리는 아래에 설명합니다.
사용자 에이전트
그러나 그러한 직접 사용 urllib2를 웹 사이트에 요청을 보내고 조금 갑작스러운처럼, 사람들이 모든 문을 가지고, 당신은 분명하지 매우 정중에 파산 행인의 신원을 직접 비트 않습니다. 그리고 액세스에 대한 요청이 거부 할 수 있습니다, 일부 사이트는하지 (인간이 아닌 액세스) 액세스를 프로그램하고 같이 할 수있다.
우리는 사이트에 요청 사람에게 법적 지위를 사용하는 경우 우리가 정체성이 우리의 코드를 제공해야하므로하지만, 분명히 사람들은라고, 환영 User-Agent
의 머리.
- 브라우저는 우리가 실제 사용자처럼 크롤러를 원하는 경우, 인터넷 세계의 정체성을 허용되기로 인식하고, 우리가하는 첫 번째 단계는 인식 브라우저로 위장 할 필요가있다. 다른 브라우저는 서로 다른 사용자 에이전트 헤더가 시간에 요청을 보냅니다. urllib2가 기본 사용자 에이전트 헤더는 다음과 같습니다
Python-urllib/x.y
(X와 Y는 파이썬 메이저와 마이너 버전 번호입니다 예를 들어, 파이썬 URLLIB / 2.7)
# . 코딩 8 = UTF- 가져 오기 urllib2가 URL = " http://www.cnblogs.com/loaderman/ " #의 9.0 사용자 에이전트의 정보 요소의 ua_header의에 포함 된 ua_header = { " User-- 에이전트 " : " 모질라 / 5.0 ( 호환; MSIE 9.0; 윈도우 NT 6.1; 삼지창 / 5.0; " } #의 건설 요청 요청 헤더와 함께 URL이 요청은 사용자 에이전트 IE9.0 브라우저에 포함됩니다 요청 = urllib2.Request (URL, 헤더 = ua_header) # 서버에 요청 전송 응답 = urllib2.urlopen (요청) HTML = response.read () 인쇄 HTML을
자세한 내용은 헤더 추가
는 특정 HTTP 요청 헤더를 추가하면 전체 HTTP 요청 메시지를 구성합니다.
호출하여
Request.add_header()
추가 / 당신은 또한 호출 할 수 있습니다 헤더 특정 수정Request.get_header()
기존의 헤더를 볼 수 있습니다.
- 특정 헤더 추가
# Urllib2_headers.py 가져 오기 urllib2가 URL = " http://www.cnblogs.com/loaderman/ " #의 IE들 - 9.0 - 사용자의 에이전트 헤더 = { " User-- 에이전트 " : " 호환 모질라 / 5.0 (; MSIE 9.0; 윈도우 NT 6.1; 삼지창 / 5.0] " } 관련 = urllib2.Request (URL 헤더 = 헤더) # ()를 호출 할 request.add_header 추가 / 특정 헤더 수정할 수 request.add_header ( " 연결 " , " 연결 유지를 " ) # 당신은 또한) (Request.get_header를 호출하여 헤더 정보를 볼 수 있습니다 #을request.get_header은 (header_name의는 "연결"=) 응답 = urllib2.urlopen (REQ) 인쇄 response.code의 #는 응답 상태 코드를 볼 수 있습니다 HTML = (response.read)를 인쇄 HTML을
- 임의의 추가 / 수정 사용자 - 에이전트
# urllib2_add_headers.py 수입 urllib2가의 수입 임의 URL = " 시간 TTP : //www.cnblogs.com/loaderman/ " ua_list = [ " 모질라 / 5.0 (윈도우 NT 6.1) 애플 .... " , " 모질라 / 5.0 ( X11, CROS는 i686 2268.111.0) ... " , " 모질라 / 5.0 (매킨토시; U; PPC 맥 OS X ... " , " 모질라 / 5.0 (매킨토시, 인텔 맥 OS ... " ] USER_AGENT = 임의 .choice (ua_list) 요청 = urllib2.Request (URL) # 또한 호출하여 추가 할 수 있습니다 Request.add_header () / 특정 헤더 수정 request.add_header ( " 사용자 에이전트 " , USER_AGENT) # 첫 글자를 대문자, 뒤 모두 소문자 request.get_header ( " 사용자 에이전트를 " ) 응답 = urllib2.urlopen (REQ) HTML = response.read () 인쇄 HTML을