python 파충류 입문 강좌-우아 한 HTTP 라 이브 러 리 requests(2)

7077 단어 pythonhttprequests
머리말
urllib,urllib 2,urllib 3,httplib,httplib 2 는 모두 HTTP 와 관련 된 Python 모듈 로 이름 만 봐 도 반 인간 적 이 고 더 나 쁜 것 은 이 모듈 들 이 Python 2 와 Python 3 에서 큰 차이 가 있 으 며 업무 코드 가 2 와 3 을 동시에 호 환 하려 면 쓰 면 붕 괴 될 수 있다 는 것 이다.
다행히 매우 놀 라 운 HTTP 라 이브 러 리 는 requests 라 고 합 니 다.GitHUb 가 가장 많은 파 이 썬 프로젝트 중 하나 입 니 다.requests 의 저 자 는 Kenneth Reitz 의 신 입 니 다.
requests 는 HTTP 프로 토 콜 의 대부분 기능 을 실 현 했 습 니 다.Keep-Alive,연결 풀,Cookie 지속 화,콘 텐 츠 자동 압축 해제,HTTP 에이전트,SSL 인증,연결 시간 초과,Session 등 여러 가지 기능 을 제공 합 니 다.가장 중요 한 것 은 python 2 와 python 3 를 동시에 호 환 하 는 것 입 니 다.requests 의 설 치 는 pip 방법 을 직접 사용 할 수 있 습 니 다:pip install requests
송신 요청

>>> import requests
# GET   
>>> response = requests.get(https://foofish.net)
응답 내용
반환 을 요청 하 는 값 은 Response 대상 입 니 다.Response 대상 은 HTTP 프로 토 콜 에서 서버 가 브 라 우 저 에 게 반환 하 는 응답 데이터 에 대한 패키지 입 니 다.응답 하 는 주요 요 소 는 상태 코드,원인 구문,응답 첫 번 째,응답 체 등 을 포함 합 니 다.이러한 속성 은 모두 Response 대상 에 봉 인 됩 니 다.

#    
>>> response.status_code
200

#     
>>> response.reason
'OK'

#     
>>> for name,value in response.headers.items():
...  print("%s:%s" % (name, value))
...
Content-Encoding:gzip
Server:nginx/1.10.2
Date:Thu, 06 Apr 2017 16:28:01 GMT

#     
>>> response.content

'<html><body>       ...</body></html>
requests 는 GET 요청 을 지원 하 는 것 외 에 도 HTTP 규범 중의 다른 모든 방법 을 지원 합 니 다.POST,PUT,DELET,HEADT,OPTIONS 방법 을 포함 합 니 다.

>>> r = requests.post('http://httpbin.org/post', data = {'key':'value'})
>>> r = requests.put('http://httpbin.org/put', data = {'key':'value'})
>>> r = requests.delete('http://httpbin.org/delete')
>>> r = requests.head('http://httpbin.org/get')
>>> r = requests.options('http://httpbin.org/get')
조회 매개 변수
많은 URL 에 긴 매개 변 수 를 가지 고 있 습 니 다.우 리 는 이 매개 변 수 를 URL 의 조회 매개 변수 라 고 부 릅 니 다."?"URL 링크 뒤에 추 가 됩 니 다.여러 매개 변 수 를'&'로 구분 합 니 다.예 를 들 어:http://fav.foofish.net/?p=4&s=20 현재 검색 파 라 메 터 를 사전 으로 구축 할 수 있 습 니 다.

>>> args = {"p": 4, "s": 20}
>>> response = requests.get("http://fav.foofish.net", params = args)
>>> response.url
'http://fav.foofish.net/?p=4&s=2'
요청
requests 는 첫 번 째 필드 Headers 를 간단하게 지정 할 수 있 습 니 다.예 를 들 어 User-agent 를 브 라 우 저 로 위장 하여 요청 을 보 내 서버 를 속 일 때 가 있 습 니 다.사전 대상 을 매개 변수 headers 에 직접 전달 하면 됩 니 다.

>>> r = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
요청 체
requests 는 POST 요청 에 필요 한 데 이 터 를 매우 유연 하 게 구축 할 수 있 습 니 다.서버 가 보 내 는 데이터 가 폼 데이터 라면 키워드 파라미터 data 를 지정 할 수 있 습 니 다.json 형식 문자열 파 라 메 터 를 전달 하 라 고 요구 하면 json 키워드 파 라 메 터 를 사용 할 수 있 고 매개 변수의 값 은 사전 으로 전달 할 수 있 습 니 다.
폼 데이터 로 서버 에 전송

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post("http://httpbin.org/post", data=payload)
json 형식의 문자열 형식 으로 서버 에 전송

>>> import json
>>> url = 'http://httpbin.org/post'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, json=payload)
응답 내용
HTTP 가 되 돌아 오 는 응답 메시지 의 중요 한 부분 은 응답 체 입 니 다.응답 체 는 requests 에서 매우 유연 하 게 처리 되 고 응답 체 와 관련 된 속성 은 content,text,json()입 니 다.
content 는 byte 형식 으로 파일 시스템 에 직접 저장 하거나 네트워크 에 전송 하기에 적합 합 니 다.

>>> r = requests.get("https://pic1.zhimg.com/v2-2e92ebadb4a967829dcd7d05908ccab0_b.jpg")
>>> type(r.content)
<class 'bytes'>
#     test.jpg
>>> with open("test.jpg", "wb") as f:
...  f.write(r.content)
text 는 str 형식 입 니 다.예 를 들 어 일반적인 HTML 페이지 는 텍스트 를 더 분석 해 야 할 때 text 를 사용 합 니 다.

>>> r = requests.get("https://foofish.net/understand-http.html")
>>> type(r.text)
<class 'str'>
>>> re.compile('xxx').findall(r.text)
제3자 오픈 플랫폼 이나 API 인 터 페 이 스 를 사용 하여 데 이 터 를 추출 할 때 되 돌아 오 는 내용 이 json 형식의 데이터 일 경우 json()방법 으로json.loads()처 리 된 대상 을 직접 되 돌려 줄 수 있다.

>>> r = requests.get('https://www.v2ex.com/api/topics/hot.json')
>>> r.json()
[{'id': 352833, 'title': '   ,    ...
에이전트 설정
파충류 가 서버 에 콘 텐 츠 를 자주 캡 처 할 때 서버 에 의 해 차단 되 기 쉬 우 므 로 데 이 터 를 계속 원활 하 게 오 르 려 면 프 록 시 를 사용 하 는 것 이 현명 하 다.벽 밖의 데 이 터 를 얻 으 려 면 프 록 시 를 설정 하면 문 제 를 해결 할 수 있 습 니 다.requests 는 프 록 시 를 완벽 하 게 지원 합 니 다.여기 서 제 가 사용 하 는 것 은 로 컬 Shadow Socks 의 대리 입 니 다.(socks 프로 토 콜 의 대 리 는 이렇게 설치 해 야 합 니 다pip install requests[socks]

import requests

proxies = {
 'http': 'socks5://127.0.0.1:1080',
 'https': 'socks5://127.0.0.1:1080',
}

requests.get('https://foofish.net', proxies=proxies, timeout=5)
시간 초과 설정
requests 가 요청 을 보 낼 때 기본 요청 에서 스 레 드 가 막 혀 서 응답 이 돌아 올 때 까지 뒤의 논 리 를 처리 합 니 다.서버 가 응답 하지 않 으 면 문제 가 심각 해 집 니 다.프로그램 전체 가 차단 상태 에 있어 서 다른 요청 을 처리 할 수 없습니다.

>>> import requests
>>> r = requests.get("http://www.google.coma")
...     
정확 한 방법 은 모든 요청 에 시간 초과 시간 을 표시 하 는 것 입 니 다.

>>> r = requests.get("http://www.google.coma", timeout=5)
5    
Traceback (most recent call last):
socket.timeout: timed out
Session
python 파충류 입문 강좌-HTTP 프로 토 콜 빠 른 이해(1)에서 HTTP 프로 토 콜 은 클 라 이언 트 와 서버 간 통신 상 태 를 유지 하기 위해 쿠키 기술 을 사용 하여 쌍방의 통신 상 태 를 유지 하도록 무 상태 프로 토 콜 이 라 고 소개 했다.
일부 웹 페이지 는 로그 인해 야 파충류 작업 을 할 수 있 는데 로그 인 원 리 는 브 라 우 저가 처음으로 사용자 이름 비밀 번 호 를 통 해 로그 인 한 후에 서버 가 클 라 이언 트 에 게 무 작위 쿠키 를 보 내 는 것 이다.다음 브 라 우 저가 다른 페이지 를 요청 할 때 방금 쿠키 를 요청 에 따라 서버 에 보 내 면 서버 는 이 사용자 가 이미 로그 인 한 사용자 임 을 알 수 있다.

import requests
#     
session = requests.Session()
#   url
session.post(login_url, data={username, password})
#         url
r = session.get(home_url)
session.close()
세 션 세 션 을 구축 한 후에 클 라 이언 트 가 처음으로 로그 인 요청 계 정 을 시 작 했 습 니 다.서버 는 자동 으로 쿠키 정 보 를 session 대상 에 저장 하고 두 번 째 요청 을 할 때 requests 는 자동 으로 session 중의 쿠키 정 보 를 서버 에 보 내 통신 상 태 를 유지 합 니 다.
프로젝트 실전
마지막 으로 실전 프로젝트 입 니 다.어떻게 requests 로 자동 로그 인 을 실현 하고 사용자 에 게 개인 편 지 를 보 내 는 지 다음 글 에서 설명 하 겠 습 니 다.
총결산
자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기