• Python21天学习挑战赛Day(12-13)·requests模块全解



    活动地址:CSDN21天学习挑战赛

    目录

    一,request全解

            安装 requests

             常用属性,方法

            response.text和response.content的区别

    response.text:

    response.content:

    通过response.content进行decode,来解决中文乱码——

    常见编码字符集

    发送带headers参数请求

            查看浏览器请求头

             方法解释

            代码示例

            发送带参数请求

             法一:网址中带参数

            法二:通过字典params构造参数字典

            在headers参数中携带cookie

            在字典中添加cookie参数

    超时参数timeout

            timeout使用方法

    proxies代理参数的使用

            proxies使用方法 

    发送post请求

            找data表单


    一,request全解

            此模块主要用于发送请求获取响应,代码简洁。

            安装 requests

    pip install requests

             常用属性,方法

     案例——通过requests向360导航首页发送请求,获取该页面源码

    1. import requests
    2. # 目标网址
    3. url = "https://hao.360.com/?src=lm&ls=n49dd49049f"
    4. # 发送请求获取响应
    5. response = requests.get(url)
    6. # 查看响应对象的类型
    7. print(type(response))
    8. # 查看响应状态码
    9. print(response.status_code)
    10. # 查看响应内容的类型
    11. print(type(response.text))
    12. # 查看cookies
    13. print(response.cookies)
    14. # 查看响应的内容
    15. print(response.text)

    输出——

    1. <class 'requests.models.Response'>
    2. 200
    3. <class 'str'>
    4. for .360.com/>]>
    5. class="" lang="zh-cn">
    6. "utf-8" />
    7. <span class="hljs-number">360</span>导航_一个主页,整个世界
    8. "dns-prefetch" href="//hao1.qhimg.com"/>
    9. "dns-prefetch" href="//hao2.qhimg.com"/>
    10. #很长,未全复制过来

            response.text和response.content的区别

    response.text:

            ·类型:str

            ·解码类型:resquests模块自动根据HTTP头部对响应的编码作出有根据的推测,推测文本编码

    response.content:

            ·类型:bytes

            ·解码类型:无指定,执行挑选

    通过response.content进行decode,来解决中文乱码——

            ·response.content.decode():默认utf-8

            ·response.content.decode('GBK')

    常见编码字符集

            ·utf-8

            ·gbk

            ·asci

            ·iso-8859-1

    案例——

    1. import requests
    2. # 目标网址
    3. url = "https://www.taobao.com/"
    4. # 发送请求获取响应
    5. response = requests.get(url)
    6. # 手动设置编码格式
    7. response.encoding = 'utf8'
    8. # 打印源码的str类型数据
    9. print(response.text)
    10. # response.content是存储的bytes类型的响应数据,进行decode操作
    11. print(response.content.decode('utf-8'))

    输出——

    1. "zh-CN">
    2. "utf-8" />
    3. "X-UA-Compatible" content="IE=edge,chrome=1" />
    4. "renderer" content="webkit" />
    5. 淘宝网 - 淘!我喜欢
    6. "spm-id" content="a21bo" />
    7. "description" content="淘宝网 - 亚洲较大的网上交易平台,提供各类服饰、美容、家居、数码、话费/点卡充值… 数亿优质商品,同时提供担保交易(先收货后付款)等安全交易保障服务,并由商家提供退货承诺、破损补寄等消费者保障服务,让你安心享受网上购物乐趣!" />
    8. "aplus-xplug" content="NONE">
    9. "keyword" content="淘宝,掏宝,网上购物,C2C,在线交易,交易市场,网上交易,交易市场,网上买,网上卖,购物网站,团购,网上贸易,安全购物,电子商务,放心买,供应,买卖信息,网店,一口价,拍卖,网上开店,网络购物,打折,免费开店,网购,频道,店铺" />
    10. "dns-prefetch" href="//g.alicdn.com" />

    发送带headers参数请求

            查看浏览器请求头

    右键——检查——Network——User-Agent,复制即可

             方法解释

    requests.get(ur1, headers=headers)
    

    ·headers参数接收字典形式的请求头

    ·请求头字段名作为key,字段对应的值作为value

            代码示例

    1. import requests
    2. # 目标网址
    3. url = "https://www.taobao.com/"
    4. # 构建请求头字典,最重要的就是User-Agent
    5. # 如果需要其他请求头,就在headers字典中加上
    6. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    7. # 发送请求获取响应
    8. response = requests.get(url,headers=headers)
    9. print(response.text)

     输出——整个网页源码(截取显示)

            发送带参数请求

    如何删除网页地址中多余参数

            ·浏览器搜:猫,显示的url很复杂

            ·一个个删除参数并刷新,得到

     

             法一:网址中带参数

    1. import requests
    2. # 目标网址
    3. url = "https://www.baidu.com/s?wd=python"
    4. headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    5. # 发送请求获取响应
    6. response = requests.get(url,headers=headers)
    7. print(response.text)

            法二:通过字典params构造参数字典

    1. import requests
    2. # 目标网址
    3. url = "https://www.baidu.com/s?"
    4. headers = {
    5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    6. # 请求参数是一个字典
    7. kw = {'wd': 'python'}
    8. # 发送请求的时候设置参数字典,获取响应
    9. response = requests.get(url, headers=headers, params=kw)
    10. print(response.text)

            在headers参数中携带cookie

    网站经常利用请求头中的cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加cookie,模拟普通用户请求。Cookie具有时效性,一段时间后需要更换

    如图找到对应Cookie并复制

            在字典中添加cookie参数

    1. headers = {
    2. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
    3. 'Cookie': 'BAIDUID=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BAIDUID_BFESS=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BIDUPSID=157D064FDE25DE5DD0E68AF62CBC3627; PSTM=1655611179; BD_UPN=12314753; ZFY=Cs:BflL5Del98YBOjx2EyRPzQE3QCyolFKzgVTguBEHI:C; BD_HOME=1; H_PS_PSSID=36548_36626_36673_36454_31254_36452_36690_36165_36693_36696_36569_36657_26350_36469; BA_HECTOR=85850gag05ak0l040h1hbg5st14; delPer=0; BD_CK_SAM=1; PSINO=7; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=0e08fXgvc5rDJVK1jRjlqmZ7pLp5r%2Fmn9jlENTs3CQ4%2FbhzUL09Y%2F%2FYtCGA; baikeVisitId=e10d7983-547d-4f34-a8d8-ec98dbcba8e4; COOKIE_SESSION=115_0_2_2_1_2_1_0_2_1_0_0_0_0_0_0_1655611189_0_1656233437%7C3%230_0_1656233437%7C1'
    4. }

    超时参数timeout

            上网时遇到网络波动,一个请求等了很长时间也可能没有结果,这会让整个项目的效率变得很低。这时需要请求强制停止,若没有在特定时间内返回结果则报错。

            timeout使用方法

    response = requests.get(ur1, timeout=3)
    

            3秒后无响应则抛异常

    实例——

    1. import requests
    2. # 目标网址
    3. url = "https://www.baidu.com/"
    4. headers = {
    5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    6. }
    7. try:
    8. response = requests.get(url, headers=headers, timeout=5) # 超时设置为5秒
    9. except:
    10. for i in range(4): # 循环去请求网站
    11. response = requests.get(url, headers=headers, timeout=20)
    12. if response.status_code == 200:
    13. break
    14. html_str = response.text

    proxies代理参数的使用

            为了让服务器认为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,需要使用代理ip

            

            proxies使用方法 

    response = requests.get(url, proxies=proxies)
    

    proxies的形式:字典

    1. proxies = {
    2. "http": "http://12.34.5679:9527",
    3. "https": "https://12.34.5679:9527",
    4. }

    注意:当proxies字典中包含有多个键值对,发送请求时将按照url地址的协议来选择使用相应的代理ip。

    发送post请求

            requests模块发送post请求函数的其它参数与发送get请的参数完全一致

    语法

    response = requests.post(url, data) # data参数接收一个字典
    

            找data表单

    1. import requests
    2. url = "https://fanyi.so.com/"
    3. data = {
    4. 'word': '鸟'
    5. }
    6. response = requests.post(url)
    7. print(response.text)

    1. E:\anaconda\envs\request\python.exe C:/Users/Administrator/PycharmProjects/request/main.py
    2. "utf-8">
    3. "X-UA-Compatible" content="IE=edge,chrome=1">
    4. </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-number">360</span>翻译
    5. "">
    6. "360翻译支持中英深度互译,提供生词释义、权威词典、双语例句等优质英语学习资源,360NMT(神经网络机器翻译)智能加持,更熟悉国人表达习惯!">
    7. "always" name="referrer">
    8. "stylesheet" type="text/css" href="https://s1.ssl.qhimg.com/static/d5b9d5285f9f7552/index.css" inline>
    9. id="index">

    1. import requests
    2. url = "https://fanyi.baidu.com/"
    3. data = {
    4. 'query': '爱'
    5. }
    6. response = requests.post(url)
    7. print(response.text)

  • 相关阅读:
    [经验] 天猫盒子怎么投屏手机照片 #经验分享#其他#经验分享
    南京大学计院夏令营历年机试笔试题汇总(刷题版)
    JVM - 内存模型
    【DevOps】Git 图文详解(四):Git 使用入门
    关于iview select 绑定两个值的方法
    Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘
    Spring Security 自定义拦截器Filter实现登录认证
    【Leetcode】【每日一题】【简单】2520. 统计能整除数字的位数
    流量有了,却没有带来预期的业务增长?
    HP DL380z Gen9服务器Led故障灯说明
  • 原文地址:https://blog.csdn.net/weixin_62599885/article/details/126349044