Requests库函数的学习(玩转python网络爬虫)

本文详细介绍了Python中Requests库的基本用法,包括GET和POST请求的发送,响应对象的解析,以及如何处理复杂的请求如添加请求头、使用代理IP、证书验证等。适合初学者快速上手网络爬虫和API调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、请求方式

HTTP常用的请求方式是GET和POST,Requests对此区分两种不同的请求方式。

(1)GET请求

Requests的GET请求分为两种:不带参数和带参数。判断URL是否带有参数,通过对“?”进行判断,“?”表示带有参数。

import requests
# 第一种方法
r = requests.get('https://www.baidu.com/s?wd=python')
# 第二种方法
url = 'https://www.baidu.com/s'
# params表示GET请求中的参数
params = {'wd': 'python'}
r = requests.get(url,params = params)
print(r.url)

两种方法都表示请求同一URL,实际开发选择第一种方法,因为不仅代码简单,而且如果参数动态变化,那么可以使用字符串格式对URL动态设置,比如:'https://www.baidu.com/s?wd=%s'%('python')。

(2)POST请求

POST请求就是提交表单,表单的数据内容就是POST的请求参数,Requests实现POST请求需设置请求参数data,数据格式可以是字典,元组,列表,JSON格式。

# 字典类型
data = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3'
}
# 元组或列表
(('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'))
# JSON
import json
# 将字典转化为JSON
data = json.dumps(data)
# 发送POST请求
import requests
# data是POST方法的请求参数
r = requests.post('https://www.baidu.com/', data=data)
print(r.text)

Requests的GET和POST方法的请求参数分别是params和data。

(3)response(响应对象)

当向网站发送请求时,网站会返回相应的响应对象,包含服务器响应的信息。

Requests提供以下方法响应内容:

r.status_code:响应状态码

r.raw:原始响应体,使用r.raw.read()读取

r.content:字节方式的响应体,需要进行解码。

r.text:字符串方式的响应体。

r.header:以字典对象存储服务器响应头。

r.json:Requsts内置的JSON解码器。

r.raise_for_status():请求失败(非200响应),抛出异常。

r.url:获取请求链接。

r.cookies:获取请求后的cookies。

r.encoding:获取编码格式。

二、复杂的请求方式

(1)添加请求头(headers)

import requests
headers = {
    'content-type': 'application/json',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6756.400 QQBrowser/10.3.2473.400'
}
requests.get('http://www.baidu.com/', headers=headers)

(2)使用代理IP(proxies)

import requests
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'https://10.10.1.10:1080'
}
requests.get('http://www.baidu.com/', proxies=proxies)

(3)证书验证(verify)

通常设置关闭验证。

import requests
url = 'https://kyfw.12306.cn/otn/leftTicket/init'
# 关闭证书验证
r = requests.get(url, verify=False)
print(r.status_code)
# 开始证书验证
# r = requests.get(url, verify=True)
# 设置证书路径
# r = requests.get(url, verify='/path/to/certfile')

(4)设置超时时间(timeout)

发送请求后超出设置的时间便会停止等待响应,如果服务器在该时间之内没有响应就会导致异常。

import requests
# GET请求
requests.get('http://www.baidu.com/', timeout=0.001)
# POST请求
requests.post('http://www.baidu.com/', timeout=0.001)

(5)标识识别身份(Cookies)

import requests
url = 'https://static.zhihu.com/heifetz/vendor.995451a211dcf23e7059.js'
temp_cookies = '_zap=e6bcb677-f710-4bf1-8ceb-de51e97415c9; _xsrf=685f3baf-45be-43b4-8f32-02de3367b5e5; d_c0="AEDkwu2GVA6PThq56D3xIo2-6W-daZoS90s=|1538970683"; q_c1=185fcb11f0f7429eaba419368a2f4b7e|1538970685000|1538970685000; l_n_c=1; n_c=1; l_cap_id="Y2E3MGY5ZTdhZWFiNDE0ZjkzMmQ0MTQzOGM1YWExM2Y=|1539332192|46faa5b9406b718f99e6c369465bccbde3cc5ba9"; r_cap_id="ZWEwODQwMTkyMGM0NDE1N2E3YWFhNDI5ZTZmOTE5NmU=|1539332192|405231c0a71396732f27d6a4368c78c0f7bb86cb"; cap_id="YjAxNGUzN2M1MzFjNDhjNWE4M2UyZjg3MDBkNWJiNWY=|1539332192|4758bc5f5a4678861d6990b9dd2dc86bb2812364"; tgw_l7_route=5bcc9ffea0388b69e77c21c0b42555fe'
cookies_dict = {}
for i in temp_cookies.split(';'):
    value = i.split('=')
    cookies_dict[value[0]] = value[1]
r = requests.get(url, cookies=cookies_dict)
print(r.text)

当程序发送请求时,自动生成一个RequestsCookieJar对象,用于存放Cookies对象。

requests.utils.dict_from_cookiesjar()方法提供RequestsCookieJar转化为字典。

requests.utils.cookiesjar_from_dict()方法提供字典转化为RequestsCookieJar。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值