爬虫基础--request库详解

爬虫基础–request库详解

1. requests模块介绍

request库中文文档:https://docs.python-requests.org/zh_CN/latest/user/quickstart.html

requests 是一个非常流行的 Python HTTP 第三方库,它允许你发送各种 HTTP 请求,处理 cookies、会话、连接池、重定向、多种认证方式等,使得处理 HTTP 请求变得非常便捷,是爬虫常用到的网络请求库。

2. 安装requests模块

pip install requests

3.requests模块发送网络请求

get请求方式
import requests 

# 目标url
url = 'https://www.baidu.com' 

# 向目标url发送get请求
response = requests.get(url)

# 打印响应内容
print(response.text)

post请求方式

import requests

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'cookie': '',
}

url = ""

data_form = {
     'action': 'getCategories',
     'vin': '',,
}
r = requests.post(url, data=data_form, headers=headers)
print(r.text)

4. response响应对象

  • response.text

    • 类型:str
    • 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
  • response.content

    • 类型:bytes
    • 解码类型: 没有指定

    import requests

    headers = {
    ‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36’
    }
    response = requests.get(‘http://www.jianshu.com’, headers=headers)

    获取状态码

    print(type(response.status_code), response.status_code)

    获取头部信息

    print(type(response.headers), response.headers)

    获取cookies

    print(type(response.cookies), response.cookies)

    获取请求的url

    print(type(response.url), response.url)

5.响应状态码

请求成功

200 (成功) 服务器已成功处理了请求。-
201 (已创建) 请求成功并且服务器创建了新的资源。-
202 (已接受) 服务器已接受请求,但尚未处理。-
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。-
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。-
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。-
206 (部分内容) 服务器成功处理了部分 GET 请求。

请求重定向

300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。-
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。-
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。-
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。-
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。-
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。-
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

请求错误

400 (错误请求) 服务器不理解请求的语法。-
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。-
403 (禁止) 服务器拒绝请求。-
404 (未找到) 服务器找不到请求的网页。-
405 (方法禁用) 禁用请求中指定的方法。-
406 (不接受) 无法使用请求的内容特性响应请求的网页。-
407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。-
408 (请求超时) 服务器等候请求时发生超时。-
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。-
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。-
411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。-
412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。-
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。-
414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。-
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。-
416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。-
417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

请求服务器错误

500 (服务器内部错误) 服务器遇到错误,无法完成请求。-
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。-
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。-
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。-
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。-
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

6.requests库参数说明

使用 requests 库时,除了必填的 url 参数,你可以选填其他参数来自定义请求:

  1. headers: 字典,用于自定义HTTP请求头。
  2. cookies: 字典,或 RequestsCookieJar 对象,包含 cookies。
  3. auth: 元组,用于HTTP认证的凭据。第一个元素是用户名,第二个元素是密码。
  4. params: 字典,用于将表单数据附加到URL的查询字符串中(GET、POST请求)。
  5. data: 字典或类似字典的对象,用于表单数据的提交。(POST、PUT请求)
  6. json: 字典或类似字典的对象,用于发送JSON数据。(POST、PUT请求)
  7. files: 字典{'表单字段名': ('文件名', 文件对象)},用于上传文件。(POST请求)
  8. stream: 布尔值,用于流式下载。默认值False,为True逐块读取响应体减少内存使用。
  9. timeout: 浮点数或元组,用于指定请求的超时时间(秒)。默认无限期地等待。
  10. verify: 布尔值,或到CA证书包的路径。默认值True,为False不验证服务器SSL证书。
  11. cert: 字符串或元组,用于传递客户端证书文件的路径,或者证书和私钥文件的路径。
  12. allow_redirects: 布尔值,是否允许重定向。默认为True允许重定向。
  13. proxies: 字典,用于配置代理
(1)请求头headers:
headers = {'User-Agent': 'Mozilla/5.0 (compatible; YourBot/0.1)'}
response = requests.get('http://example.com', headers=headers)
(2)获取cookies
import requests

url = "https://www.baidu.com"
response = requests.get(url)
print(response.cookies)
for key, value in response.cookies.items():
    print(key + '=' + value)
(3)设置超时timeout

timeout:浮点数或元组,用于指定请求的超时时间(秒)。默认无限期地等待。-
可使用try...except块来捕获Timeout异常,以便在请求超时时进行适当的错误处理。

try:
    response = requests.get('http://example.com', timeout=5)  # 整数,5秒超时
    response = requests.get('http://example.com', timeout=0.5)  # 浮点数,0.5秒超时
    # timeout是元组时,用于指定连接超时时间和读取超时时间 (timeout_connect,timeout_read) 。
    response = requests.get('http://example.com', timeout=(2, 5))  # 元组,2秒连接超时,5秒读取超时
except requests.exceptions.Timeout:
    print("请求超时")
(4)认证信息auth

用于HTTP认证的凭据。第一个参数是用户名,第二个参数是密码。requests 库会自动将这些认证信息编码并附加到请求的 HTTP 头中。

⑴ 基本认证(Basic Auth)
# 定义认证信息
username, password = 'user', 'pass'
# 使用基本认证发起 GET 请求
auth = (username, password)
response = requests.get('http://example.com', auth=auth)
⑵ 摘要认证(Digest Auth)
from requests.auth import HTTPDigestAuth

username, password = 'user', 'pass'
# 使用摘要认证发起 GET 请求
auth = HTTPDigestAuth(username, password)
response = requests.get('http://example.com', auth=auth)
⑶ 令牌认证(Token Auth)
# 定义令牌
token = 'your_access_token'
# 定义请求头,包含令牌
headers = {'Authorization': f'Token {token}'}
# 使用令牌认证发起 GET 请求
response = requests.get('http://example.com/protected', headers=headers)
(5)表单参数data
⑴ 使用表单数据发送POST请求
 # 定义表单数据
 data = {
     'key1': 'value1',
     'key2': ['value2', 'value3']
 }
response_form = requests.post('https://example.com/post', data=data)
⑵ 使用json数据发送POST请求
import json
import requests

headers = {'Content-Type': 'application/json'}
 data = {
     'key1': 'value1',
     'key2': ['value2', 'value3']
 }
# 将字典转换为JSON字符串
json_data = json.dumps(data)
response_json = requests.post('https://example.com/post', headers=headers, data=json_data)
⑶ 使用流式上传文件:
with open('file.zip', 'rb') as file:
    response = requests.post('https://example.com/post', data=file)
希望这篇文章对你有帮助,不断进步!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值