>백엔드 개발 >파이썬 튜토리얼 >Python이 요청을 사용하여 웹 페이지를 요청하는 방법

Python이 요청을 사용하여 웹 페이지를 요청하는 방법

WBOY
WBOY앞으로
2023-04-25 09:29:011796검색

Requests는 urllib2의 모든 기능을 상속합니다.

Requests는 HTTP 연결 지속성 및 연결 풀링을 지원하고, 쿠키를 사용하여 세션을 유지하도록 지원하고, 파일 업로드를 지원하고, 응답 콘텐츠의 인코딩 자동 결정을 지원하고, 국제화된 URL 및 POST 데이터의 자동 인코딩을 지원합니다.

설치 방법

pip를 사용하여 설치

$ pip install requests

GET 요청

기본 GET 요청(헤더 매개변수 및 parmas 매개변수)

1 가장 기본적인 GET 요청은 get 메소드'

response = requests.get("http://www.baidu.com/")
 
# 也可以这么写
# response = requests.request("get", "http://www.baidu.com/")

를 직접 사용할 수 있습니다. 2. 헤더 및 쿼리 매개변수 추가

헤더를 추가하려면 headers 매개변수를 전달하여 요청 헤더에 헤더 정보를 추가할 수 있습니다.

URL에 매개변수를 전달하려면 params 매개변수를 사용할 수 있습니다.

import requests
 
kw = {'wd':'长城'}
 
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params = kw, headers = headers)
 
# 查看响应内容,response.text 返回的是Unicode格式的数据
print (response.text)
 
# 查看响应内容,response.content返回的字节流数据
print (respones.content)
 
# 查看完整url地址
print (response.url)
 
# 查看响应头部字符编码
print (response.encoding)
 
# 查看响应码
print (response.status_code)

실행 결과

......

......

'http://www.baidu.com/s?wd=%E9%95%BF%E5%9F% 8E'
 
'utf-8'
 
200

response.text를 사용할 때 요청은 HTTP 응답의 텍스트 인코딩을 기반으로 응답 콘텐츠를 자동으로 디코딩하며 대부분의 유니코드 문자 집합을 원활하게 디코딩할 수 있습니다.

response.content를 사용할 때 반환되는 것은 서버 응답 데이터의 원본 바이너리 바이트 스트림이며, 이는 이미지와 같은 바이너리 파일을 저장하는 데 사용할 수 있습니다.

POST 방법

1. 기본 POST 요청

response = requests.post("http://www.baidu.com/",data = data)

2.body with 매개변수

formdata = {
    "type": "AUTO",
    "doctype": "json",
    "key": "www",
    "ue": "UTF-8",
}
url = "http://auto-installment/v1/loan-credit-check"
response = requests.post(url,data = data,headers=headers)
 
print(response.text)#显示返回结果
print(response.json())# 如果是json文件可以直接显示

참고:

인쇄된 결과에 중국어 문자가 깨져 표시됩니다. json.dupms(response, verify_ascii=False)를 사용하세요. )을 해결하기 위해

Session

일반적으로 Session은 다른 페이지에 액세스하기 전에 로그인하는 등 요청 전반에 걸쳐 특정 매개변수를 유지하는 데 사용됩니다.

# 1. 创建session对象,可以保存Cookie值
session = requests.session()
 
# 2. 需要登录的用户名和密码
data = {"username": "mxxxx", "password": "1233444"}
 
# 3. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
session.post("https://www.jianshu.com/sign_in", data=data)
 
# 4. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = session.get("https://www.jianshu.com/writer#/")

함정에 대한 참고사항

1. 오류가 보고되지만 인터페이스 자체에는 문제가 없습니다. 인터페이스에는 단순 유형(일반적으로 3개 미만)과 복합 객체 유형이라는 두 가지 유형의 요청 매개변수가 있기 때문입니다.

해결책: 헤더에서 이 두 매개변수의 유형을 정의하세요

단순 유형: headers={"Content-Type": "application/x-www-form-urlencoded"}

복잡한 개체 유형: headers= {"Content -Type":application/json}

2. 일부 HTTPS 요청에는 SSL 인증서 확인이 있습니다

해결 방법: response = 요청.get("https://www.baidu.com/", verify =False)

Extension

1. 요청이 실패한 후 재시도 메커니즘을 추가하세요(실패하면 3번 재시도됩니다)

request_retry = requests.adapatrs.HTTPAdapaters(max_retries=3)
session.mount('https://',request_retry)

2. grequests를 사용하여 비동기 요청을 구현하세요

urls = [
    'http://www.url1.com',
    'http://www.url2.com',
    'http://www.url3.com',
    'http://www.url4.com',
    'http://www.url5.com',
]
resp = (grequests.get(u) for u in urls)
grequests.map(resp)

3.

요청 사이에 쿠키를 유지하기 위해 세션 인스턴스를 사용하지만 특별한 경우에는 사용자 정의 쿠키를 사용해야 합니다

요청 사이에 쿠키를 유지하기 위해 세션 인스턴스를 사용하지만 특별한 경우에는 사용자 정의 쿠키를 사용해야 합니다

# 自定义cookies
cookie = {'guid':'5BF0FAB4-A7CF-463E-8C17-C1576fc7a9a8','uuid':'3ff5f4091f35a467'}
 
session.post('http://', cookies=cookie)

4. API 요청에 소요된 시간을 계산합니다

session.get(url).elapsed.total_seconds()

5. 요청 시간 초과 설정

session.get(url, timeout=15)

6. 파일 업로드

요청은 파일 데이터 제출을 시뮬레이션하기 위해 파일을 사용합니다.

위 내용은 Python이 요청을 사용하여 웹 페이지를 요청하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제