파이썬 웹 크롤러의 URLLIB 기본 라이브러리

, URLLIB에서 Python3 하나의 라이브러리로 urllib2가 두 라이브러리에서 URLLIB 라이브러리를 통합.

URLLIB 라이브러리는 다음과 같은 네 가지 주요 모듈을 포함, 파이썬 HTTP 요청 라이브러리를 구축 :

  • 요청 : 기본은 HTTP 요청은 아날로그 전송 요청을위한 가장 중요한 모듈입니다.
  • 오류 : 예외 핸들링 모듈.
  • 분석 : 툴 모듈, URL 많은 처리 방법, 해상도, 해상도, 조합 등.
  • robotparser은 : 당신이 오를 수있는 사이트를 확인하려면 사이트의 robot.txt 파일을 식별하는 데 사용

1.request 모듈 : 요청을 전송

모듈을위한 요청을 보내는 실현하고 요청에 응답하여 획득 될 수있다. 주로 다음과 같은 방법으로 :

1.urlopen ()

기본으로 urlopen () 메소드는 기본 페이지 GET 요청을 수행 할 수 있습니다. 예를 들어, 바이두, 예를 들면 :

import urllib.request
response=urllib.request.urlopen("http://www.baid.com")
print(response.read().decode("utf-8"))

다음과 같은 결과를 얻을 수 위의 코드 조각을 실행합니다 :

그래서, 우리가 무엇 응답 변수에 도착, 그가 볼 수있는 것은 "<클래스 'http.client.HTTPResponse'> '개체 클래스의 주요 속성은 메시지, 버전, 상태, 이유 등의 유형입니다 인쇄 주요 방법은 읽기 (), readinto (), 대해 getHeader (이름), 대해 getHeaders () 등이있다. 우리는 이러한 방법과 속성을 호출 할이 객체를 가져옵니다.

예를 들어, 위에서 바이두 웹 사이트의 예는 우리가 호출이 다음과 같이 몇 가지 경우였다 말했다 :

응답 클래스 객체의 속성

어떻게) (urlopen 함수의 해석에서 문서를 먼저 봐, 그것을 운영하는 몇 가지 매개 변수를 전달하는 연결하려면 :

* urllib.request.urlopen (URL 데이터 = 없음, 초과 = <0x000000000049D760에서 오브젝트 object>, , cafile에서 = 없음, capath에 = 없음, cadefault = 거짓, 문맥 = 없음)

우리는 URL 외에 여러 가지 다른 매개 변수가 볼 수 있습니다. 우리는 하나 하나 소개했다.

  • 데이터 매개 변수

당신이 필요로하는 바이트 매개 변수를 추가 할 경우 선택적 매개 변수가 있지만, () 메소드는 내용의 바이트 스트림 형식으로 변환됩니다. GET 요청 방법에서이 매개 변수를 추가 POST가된다. 예를 들면, 데이터 바이트 = (urllib.parse.urlencode ({ '세계'안녕하세요 '}), 부호화 = "UTF-8")

  • 시간 제한 매개 변수

이와 시간 예외에 응답 초과되지 않은 요구가 발생하는 경우, 타임 아웃 = 1 설정 시간 종료 설정.

2.Request ()

urlopen ()가 라이브러리의 가장 기본적인 요구, 당신은 가장 간단한 내용을 얻을 수 있지만, 이러한 헤더의 컨텐츠를 추가하는 등 무엇이든 더 복잡한 요청을 할 수 없어, 우리는 더 강력한 요청 방법을 구축해야합니다. 요청의 사용을 봐 :

import urllib.request

request = urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))

위의 코드에서, 동일한 방법을 사용하지만 urlopen 전송 요청 아니지만 파라미터는 URL 있지만 오브젝트 요청 클래스이다. 사용은 우리의 구성 매개 변수보다 유연하고 더 편리 할 수 있습니다 요청합니다.
같은 API 인터페이스 모양을 요청 :

urllib.request.Request (URL 데이터 = 없음, 헤더 = {} = origin_req_host으로 확인할 수 없음 = 거짓, METHOD = 없음)

  • URL : 필수 매개 변수, 요청 URL
  • 데이터 : 바이트 스트림 타입 바이트
  • 헤더 : 일반적으로이 매개 변수의 부재에 사용되는 위장 사전 브라우저, 서버는 파이썬으로 방문을 인식, 우리는 당신이 검은 파충류, 안티 파충류를 끌어 심판 할 것이다
  • origin_req_host : 파티 호스트 또는 IP를 요청
  • 확인 불가능한 : 요청이 확인 불가능한인지, 거짓 기본값을 나타냅니다. 사용자가 더 권한이 없다는 것을 의미하는 것은 요청 내용을받을 수 있습니다.
  • 방법 과 같은 방법 GET, POST, PUT 등을 사용하여 요청

2.error 모듈 : 예외 처리

URLLIB 모듈에서, 응답 요구 모듈 예외를 발생 비정상적인 경우 에러 예외 요청 모듈에 의해 생성되는 정의한다.

1.URLError

모듈에서 URLLIB 에러가 OSError 클래스가 기본 클래스 모듈 에러 예외로부터 상속 된 예외 처리함으로써 요청 모듈에 의해 트리거 될 수있다. 잘못된 이유 인 속성 이유가있다.

2.HTTPError

URLError 서브 클래스, 전문 오류가 요청이 실패와 같은 HTTP 요청을 처리,이 세 가지 속성이 있습니다 :

  • 코드 : 같은 존재하지 않는 일반적인 404 페이지로, HTTP 상태 코드를 반환
  • 이유 : 오류의 원인을 반환
  • 헤더 : 반환 요청 헤드

여기에 처리 코드를 작성하는 일반적인 예외입니다 :

from urllib import request, error

try:
    respons = request.urlopen("www.aaaa.com")
except error.HTTPError as e:
    print(e.reason, e.code, e.headers)
except error.HTTPError as e:
    print(e.reason)
else:
    print("Request Successfully")

HTTPError가 먼저 HTTPError를 캡처 할 수 있도록, URLError의 서브 클래스이기 때문에하지, 다음 캡처 URLError 오류, 이유의 출력에 가면, 자신의 상태를 취득했다. 마지막으로, 보통 다른 논리를 처리.

3.parse 모듈 : 링크 구문 분석

파싱 ​​모듈과 결합 추출 링크 URL의 다양한 부분을 변환 표준 인터페이스의 URL을 정의한다.

1.urlparse ()

예를 들어 봐, 다음 코드를 실행합니다 :

from urllib.parse import urlparse

result = urlparse("https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1")
print(type(result),"\n", result)

다음과 같은 결과를 달성하기 위해 :

<클래스 'urllib.parse.ParseResult'>
ParseResult (계획 = 'HTTPS', netloc = 'voice.baidu.com', 경로 = '/ 행동 / newpneumonia / newpneumonia /', PARAMS = '', 쿼리 = '에서 = osari_pc_1 '단편 =' ')

알 수있는 바와 같이, 결과는 방식 netloc, 경로 PARAMS, 쿼리 단편 여섯 부를 포함하는 클래스 구문 분석의 목적이다. 표준 URL 형식으로 원래의 URL 링크와 비교하여 볼 수 있듯이으로 다음입니다 :

계획 : // netloc / 경로; PARAMS 쿼리 # 조각

그 중, "//"계약 대신 앞 체계에서, 최초의 "/", 액세스 경로 경로, 다음에 netloc, 즉 도메인 이름 앞에 기호; ";"매개 변수를 대신 PARAMS 다음, 쿼리 뒤에 "?" 일반적 GET의 URL을 사용하는 유형; "#"는 웹 페이지 내에서 페이지 안쪽 풀다운 위치를 위치시키는 앵커 하였다. URL은 그들이 개방 분할 할 수 있습니다 ()이 일반적인 규칙, 사용 urlparse을 만날 것입니다.

조상 유형 urllib.parse.ParseResult, 당신은 목록에 의해 운영 될 수있다.

2.urlunparse ()

즉 urlparse (), 역 동작.

3.urlsplit ()

그리고 urlparse ()는 5 점, 즉 길이 PARAMS 유사한 경로로 분리 된 부분을 해결하지 않다

4.urljoin ()

urljoin ( "BASE_URL", "NEW_URL")

방식 netloc 경로 : 함께 접합 두 BASE_URL 및 NEW_URL URL는, 원칙은 BASE_URL에게 단 세 가지 요소가있다. 이 링크는 3 년 동안 존재하지 않는 경우, BASE_URL가 자동 보충, Ruoguo의 존재에 사용되며, 해당 내용의 NEW_URL이 사용됩니다. BASE_URL PARAMS 내부, 쿼리, 조각 Rehe 역할을 감당할 수 없습니다.

5.urlencoden ()

직접 사용에 :

from urllib.parse import urlencode

params = {
    'name':'Merry',
    'age':18
}
base_url = "https://www.baidu.com?"
url = base_url + urlencode(params)
print(url)

출력은 : https://www.baidu.com?name=Merry&age=18  인코딩 () 함수는 시퀀스 파라미터 GET 요청에 제 1 파라미터 사전이다.

6.quote ()

from urllib.parse import quote

key = "你好"
url = "www.baidu.com/s?wd=" + quote(key)
print(url)

www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD

이 기능은 메이크업 URL 인코딩 형식을 지출 만족합니다,이 기능의 원인이 될 수 있습니다 중국어 URL 매개 변수로 쓰레기 문제를 해결한다. 어떤 역 동작 맺다이다 ()

상세히 설명하지 또한,이 urlsplit () parse_qs () parse_qsl () 함수 등을들 수있다.

추천

출처www.cnblogs.com/shuai3290/p/12563605.html