requests库的使用

Requests库

​ requests库底层实现是有urllib

​ requests在python2和python3中通用

​ 其作用是发送网络请求,返回响应数据

​ 中文文档 API: http://docs.python-requests.org/zh_CN/latest/index.html

如何发送请求

response=requests.get(url)

  • 生成一个请求需要哪些数据?

    ​ 请求方式:get\post

    ​ 请求的资源路径:url

    ​ 协议版本:HTTP/1.1 (HTTP/2.0在1.1版本的基础上增加了并发请求)

    ​ 请求参数

    ​ 请求头

获取响应

  • response.content如果得到bytes类型,则需要decode
  • response.text可以通过response.encoding()来指定解码方式

  • 响应对象中有什么?

    ​ 响应状态码:response.status_code 200 500 404

    ​ 响应消息头:response.headers set_cookie

    ​ 响应消息正文:

    ​ response.text

    ​ response.content

    ​ 发送的请求对象:

    ​ response.request

  • 判断响应是否成功

    assert response.status_code==200

response常用的方法

response.text 
respones.content
response.status_code
response.request.headers
response.headers

response.text和response.content的区别

  • response.text

    类型:str

    解码类型:根据HTTP头部读相应的编码做出有根据的推测,推测文本编码

    修改编码方式:response.encoding="gbk"

  • response.content

    类型:bytes

    解码类型:没有指定

    修改编码方式:response.content.decode("utf-8")

发送带header的请求

​ 带上请求头,可以模拟浏览器,欺骗服务器,从而获得和浏览器一致的内容

  • header的形式:字典

    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"} 

    用法是:requests.get(url,headers=headers)

发送带参数的请求

  • 参数形式:字典
  • 用法:`requests.get(url,headers=headers,parmas=dict)

发送post请求

​ 在登录注册和传输大文本内容的时候用到post请求

  • 用法

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

    data的形式:字典

用post请求百度翻译
import requests
import json


headers = {
"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"
}
query_string=input()
# query_string=sys.argv[1]
data = {
        "query": query_string,
}
post_url = "http://fanyi.baidu.com/basetrans"
url="http://fanyi.baidu.com/langdetect"
response=requests.post(url,data=data,headers=headers)
ret=response.content.decode() # ret 是一个字符串对象
ret=json.loads(ret)

print(ret)
if ret["lan"]=='en':
    # 输入是英文
    data = {
        "from": "en",
        "to": "zh",
        "query": query_string,
    }
    r = requests.post(post_url, data=data, headers=headers)
    dict_ret = json.loads(r.content.decode())
    ret = dict_ret["trans"][0]["dst"]
    print(ret)
elif ret["lan"]=='zh':
    # 输入是中文
    data = {
        "from": "zh",
        "to": "en",
        "query": query_string,
    }
    r = requests.post(post_url, data=data, headers=headers)
    dict_ret = json.loads(r.content.decode())
    ret = dict_ret["trans"][0]["dst"]
    print(ret)

代理的应用

  • 为什么使用代理
    • 让服务器以为不是同一个客户端在请求
    • 防止我们的真实地址被泄露,防止被追求
      这里写图片描述

这里写图片描述

  • 代理的使用

    • requests.get("http://www.baidu.com",proxies = proxies)

    • proxies形式:字典

    proxies = { 
        "http": "http://12.34.56.79:9527", 
        "https": "https://12.34.56.79:9527", 
        }

登录状态的保持

cookie和session的区别
  • cookie数据存放在客户的浏览器上,session数据放在服务器上
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
  • session会在一定时间内保存在服务器上,如果访问增多,会占用较多的服务器资源
  • 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
爬虫中处理cookie和session
  • 带上cookie和session的好处

    ​ 能够请求到登录之后的页面

  • 带上cookie和session的弊端

    ​ 一套cookie和session对应一个用户,如果请求太多,容易被服务器判定爬虫

  • cookie能不用则不用,如果为了获取登录之后的页面,必须发送带有cookie的请求

保持登录状态
  • requests模块提供了一个session类,来实现客户端和服务端的会话保持

    • 方法:

    ​ 实例化session对象

    ​ 让session发送get或者post请求

    session=requests.session()
    response=session.get(url,headers)
  • 手动获取cookie,保存到文件或数据库中,在发送请求时,携带cookie

    • 把cookie写到headers中

    headers={"Cookie":cookie值}

    • 使用参数将cookie字典传入
    cookies={
        "username":"xxxxx",
        "key":"value"
    }
    requests.get/post(url,cookies=cookies)

requests 其他

  • 请求ssl证书验证

    response= requests.get("https://www.12306.cn/mormhweb/ ", verify=False)

  • 设置超时

    response=requests.get(url,1)

  • 配合状态码判断是否请求成功

    assert 断言

    assert response.status_code==200

### 如何使用Python Requests进行HTTP请求 #### 安装Requests 为了能够利用`requests`的功能,在Python环境中需先完成此的安装。如果遇到pip版本较低的情况,应优先升级pip工具至最新版以确保兼容性和稳定性[^4]。 ```bash python -m pip install --upgrade pip ``` 随后通过pip命令来安装`requests`: ```bash pip install requests ``` #### 导入并初始化 一旦安装完毕,则可以在任何Python脚本中引入`requests`模块,并准备发起各种类型的HTTP请求[^1]。 ```python import requests ``` #### 发送GET请求 对于最基础的数据获取场景来说,通常会采用GET方式向服务器索要资源。下面的例子展示了怎样构建一个简单的GET请求以及处理返回的结果。 ```python response = requests.get('https://api.example.com/data') print(response.status_code) # 输出状态码 print(response.text) # 打印响应体内容 ``` #### 处理POST请求 当涉及到提交表单或者其他形式的数据上传时,可以借助于POST方法实现更复杂的信息交换过程。这里给出了一段示范代码说明如何携带参数一起发送出去。 ```python payload = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://httpbin.org/post', data=payload) print(response.json()) # 如果服务端返回JSON格式的内容可以直接解析成字典对象 ``` #### 设置请求头 有时为了让目标网站识别特定的应用程序或者模拟浏览器行为,可能还需要自定义一些额外的消息头部字段。这可以通过设置headers参数轻松达成目的。 ```python headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", } response = requests.get('https://example.com/', headers=headers) ``` 以上就是有关Python `requests`的基础介绍及其主要应用场景下的具体实践案例[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值