首页 > 其他分享 >关于requests的使用方法

关于requests的使用方法

时间:2024-08-31 08:56:40浏览次数:14  
标签:www httpbin get 关于 https org requests 方法

我们从四个模块来讲解:

  • GET请求
  • POST请求
  • 响应
  • 高级用法(cookie,session等)

GET请求:

  • 最基本的使用:
    导入requests库
    import requests
    r = requests.get('https://www.httpbin.org/get')
    将返回的内容以文本形式打印出来
    print(r.text)
    ------------------输出结果-----------------------
    {
      "args": {},
      "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Host": "www.httpbin.org",
        "User-Agent": "python-requests/2.32.3",
        "X-Amzn-Trace-Id": "Root=1-66d0962b-11c2397e368fc6e415ecb1ee"        
      },
      "origin": "113.205.146.233",
      "url": "https://www.httpbin.org/get"
    }

    这就是我们最最基础的使用方法,也是后续用的很多的一个方法,一些复杂的爬虫无非是在这些基础的使用方法上进一步的发散,所以基础一定要学好。

  • 添加请求参数:

import requests
data = {
    'name':'xhr',
    'age':24
}
r = requests.get('https://www.httpbin.org/get',params=data)
print(r.text)
----------------------------输出结果--------------------------
{
  "args": {
    "age": "24",
    "name": "xhr"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "www.httpbin.org",
    "User-Agent": "python-requests/2.32.3",
    "X-Amzn-Trace-Id": "Root=1-66d0981b-61b174ea7cc7b29716294455"        
  },
  "origin": "113.205.146.233",
  "url": "https://www.httpbin.org/get?name=xhr&age=24"
}

可以看到我们的响应的结果中已经有我们传入的数据了,其实这一步就等同于我们拼接了URL,即代码中输出结果中的‘url’的内容,需要注意一下,使用GET方法添加请求条件时,参数是params

  • 抓取二进制数据:
import requests

r = requests.get('https://scrape.center/favicon.ico')
print(r.content)
print(r.text)

对于我们返回结果是图片,视频等,我们对于返回结果进行存储时,需要采用二进制即content方法来操作,可以试试textcontent的打印结果的区别,由于打印的内容比较多,我这里就没有展示

  • 添加请求头:
import requests

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
}
r = requests.get('https://www.baidu.com/',headers=headers)
print(r.text)

 对于很多网站,是不会这么轻易的让你爬取到他的网站内容的,有时候会查看你发起的请求是否是正常的浏览器发送的请求,如果不是,就可能无法获取响应数据或者直接报错,所以我们添加请求头,来让服务器认为我们是正常的浏览器访问,也就是UA伪装。

在访问任何网站时,F12查看network(网络),找到请求标头,一般是请求标头的最后一行,可以看到User-Agent的内容,无论你访问任何网址,同一个浏览器,User-Agent的内容是一样的。

POST请求:

import requests

data = {
    'name':'xhr'
}
r = requests.post('https://www.httpbin.org/post',data=data)
print(r.text)
--------------------------输出结果-----------------------
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "xhr"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "8",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "www.httpbin.org",
    "User-Agent": "python-requests/2.32.3",
    "X-Amzn-Trace-Id": "Root=1-66d09ea6-7bb4169f0bdce166363f4ccb"        
  },
  "json": null,
  "origin": "113.205.146.233",
  "url": "https://www.httpbin.org/post"
}

POST请求的相关参数其实跟GET请求参数有很多相似的地方,我们可以对比一下学习。

  • POST请求参数的关键字是 data,GET请求参数的关键字是 params
  • POST请求的内容是在表单中即"form"体现,GET请求添加的参数内容具体是在"args"中体现

响应: 

  • 状态码:
import requests

r = requests.get('https://ssr1.scrape.center/')
exit() if not r.status_code == requests.codes.ok else print('Request Successfully')
--------------------------输出结果-------------------------
Request Successfully

状态码其实很简单,这里主要是介绍一下requests库的内置状态码查询对象requests.codes,能够使我们的状态码更加的直观。当然不止ok这一个条件码,具体还有很多,具体使用起来可以去查询一下。

高级用法:

  • 文件上传:
import requests
files = {'file':open('从0开始/requests/favicon.ico','rb')}
r = requests.post('https://www.httpbin.org/post',files=files)
print(r.text)
--------------------输出结果----------------------
{
  "args": {},
  "data": "",
  "files": {
    "file": "data:application/octet-stream;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAABILAAASCwAAAAA..."},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Content-Length": "4433",
    "Content-Type": "multipart/form-data; boundary=380ddd7af4b0861eaa420a1e5aeeafbc",
    "Host": "www.httpbin.org",
    "User-Agent": "python-requests/2.32.3",
    "X-Amzn-Trace-Id": "Root=1-66d0a1e1-1894392318198fe30f3a9689"        
  },
  "json": null,
  "origin": "113.205.146.233",
  "url": "https://www.httpbin.org/post"
}

POST 请求可以上传我们写入本地的文件,作为请求的参数,我这里就用之前获取的图片来传入的,可以在返回的结果中看到"file"中我们的图片内容是以二进制的形式传入的

  • Cookie设置
import requests
r = requests.get('https://www.baidu.com/')
# print(r.cookies)
for key,value in r.cookies.items():
     print(key + '=' + value)
----------------------输出结果----------------------
BDORZ=27315

获取相关的Cookie条目的名称和值,cookie具体的作用可以参考

爬虫中关于network中返回参数的各个含义icon-default.png?t=N7T8https://blog.csdn.net/qq_52046196/article/details/141337128?spm=1001.2014.3001.5501

  • Session维持

实际上,无论我们用GET请求也好,POST请求也好,其本质都是单独开启了一次请求,假如我们请求了一个需要登录的网站,第一次登录成功后,我第二次请求获取登录后的相关数据,这是不行的,就如刚才所说,每次请求都是独立的,为了解决这个问题,引入了Session对象

用代码来演示实际的区别

import requests
requests.get('https://www.httpbin.org/cookies/set/number/1234567')
r = requests.get('https://www.httpbin.org/cookies')
print(r.text)
--------------------输出结果--------------------------
{
  "cookies": {}
}
--------------------------------------------------------
import requests
s = requests.Session()
s.get('https://www.httpbin.org/cookies/set/number/1234567')
r = s.get('https://www.httpbin.org/cookies')
print(r.text)
--------------------输出结果--------------------------
{
  "cookies": {
    "number": "1234567"
  }
}
  • SSL证书验证

有时我们访问网站时,可能会有警告

这是由于该网站没有设置好HTTPS证书或者是网站的HTTPS证书可能不被CA机构认可,那么我们利用requests库来请求这类网站时,就会报错SSLError ,为了解决这个问题,我们引入了verify参数

import requests
r = requests.get('https://ssr2.scrape.center/',verify=False)
print(r.status_code)
--------------------输出结果------------------
C:\Users\46851\AppData\Local\Programs\Python\Python310\lib\site-packages\urllib3\connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host 'ssr2.scrape.center'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
  warnings.warn(
200

verify参数的作用是控制是否验证证书,False->不验证证书,True->验证证书。此外还需要注意一点,如果我们不设置这个参数,那么默认是会自动验证证书。

有了这个参数我们就可以很好的解决了浏览网站提示“您的连接不是私密连接”下无法获取信息的问题。

  • logging日志

刚才的输出结果中虽然结果是可以正确的打印出来,可是我们结果中有警告,具体是建议我们设置证书,看着挺烦的,所以我们可以通过捕获警告的方式来忽略警告

import requests
import logging
logging.captureWarnings(True)
r = requests.get('https://ssr2.scrape.center/',verify=False)
print(r.status_code)
------------------输出结果----------------
200

我们也可以配置日志记录器来让我们的代码错误信息更规范,层级更明确

import requests
import logging
# 配置日志记录器
logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s')
logging.captureWarnings(True)
r = requests.get('https://ssr2.scrape.center/',verify=False)
print(r.status_code)
------------------输出结果-------------------
2024-08-30 02:13:52,749 - WARNING - C:\Users\46851\AppData\Local\Programs\Python\Python310\lib\site-packages\urllib3\connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host 'ssr2.scrape.center'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
  warnings.warn(

200
  • 身份认证

有时我们登录网站时需要账号密码才能进入网站获取信息,为了解决这个问题,requests库引入了auth参数

import requests
 
r = requests.get('https://ssr3.scrape.center/',auth=('admin','admin'))
if r.status_code == requests.codes.ok:
        print('Request Successfully')
--------------------输出结果----------------------
Request Successfully

此代码中,返回值为登录后的网站信息

  • 代理

import requests
proxies = {
    'http':'http://10.10.10.10:1080',
    'https':'http://10.10.10.10:1080'
}
requests.get('https://www.httpbin.org/get',proxies=proxies)

这里展示的代理是失效的,仅作为案例参考具体的使用方法,可以去相关代理网站中去获取有效的代理

标签:www,httpbin,get,关于,https,org,requests,方法
From: https://blog.csdn.net/qq_52046196/article/details/141690872

相关文章

  • Spring Boot 中优化 if-else 语句的多种方法
    1.为什么要优化if-else语句?1.1if-else语句的弊端if-else语句虽然在处理简单的逻辑判断时非常方便,但在处理复杂业务逻辑时,其劣势逐渐显现出来:代码冗长:随着判断条件的增加,if-else语句会变得冗长,代码显得凌乱。可读性差:长串的if-else语句使代码的逻辑难以快速理解,......
  • 关于流量卡的激活和首充
    继7月份电信发文宣布所有线上卡产品从135G下降至80G后(4月份已经从185G降至135G),这个月,联通和移动也出台了同样政策和发文,这意味着三大运营商都正式进入80G时代,大流量时代已落下帷幕。 这些天,店铺内所有超过135G产品也在陆续下架,这几天很多小伙伴都希望能赶上这135G的最后末......
  • 关于pdf转markdown的一些总结
    实现一个陌生的功能,一般会经过这几个阶段如,调研,技术选型,确定最佳技术方案与备选方案,开发,测试,上线;调研大致了解不同的产品最好能上外网,首选用谷歌搜,其次用百度搜;关键词可以是pdf转markdown,或pdfmarkdownapi等等;例如我在百度搜索pdf转markdown,最后得到了方案有Nought:htt......
  • 模板方法模式:如何实现同一模板框架下的算法扩展?
    模板方法模式的原理和代码实现都比较简单,在软件开发中也被广泛应用,但是因为使用继承机制,副作用往往盖过了主要作用,所以在使用时尤其要小心谨慎。一、模式原理分析模板方法模式原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重......
  • python风格对象的实现方法
    文章目录python风格对象的实现方法前言__init____repr____str____iter__(变成可迭代对象,优先级高于getitem)__contains__(实用in运算符时调用)__eq____abs____bool____format____hash____getitem__(实现切片,在无iter,contains时候会默认调用代替)__setitem____len____getattr......
  • 【工具篇】高效记忆方法之AnKi工具
    ......
  • 分享两个方法分析python打包exe
    在Python开发中,常常需要将Python脚本打包成独立的可执行文件,以便在没有Python环境的电脑上运行。你是否曾为此感到困惑,不知道该选择哪种工具来实现这一目标?其实,打包Python脚本并不难,关键在于选择合适的工具。今天,我们将介绍两种常用的Python打包工具:PyInstaller和auto-py-to-exe,让......
  • TPAMI 2024 | 离散且平衡的谱聚类算法:一种可扩展的方法
    DiscreteandBalancedSpectralClusteringWithScalability离散且平衡的谱聚类算法:一种可扩展的方法RongWang,HuiminChen,YihangLu,QianrongZhang,FeipingNie,andXuelongLi摘要谱聚类(SC)因其卓越的聚类性能而成为深入研究的主要课题。尽管取得了成功......
  • 【信息收集】网络空间测绘FOFA,查询语法最全使用方法(图文解析)
    高级搜索基础类别标记类(SpecialLabel)协议类(type=service)网站类(type=subdomain)证书类地理位置(Location)时间类(Lastupdatetime)独立IP语法(独立IP系列语法,不可和上面其他语法共用)查询基础语法案例html搜索title标题搜索domain域名搜索host主机名搜索o......
  • 【RK3588】关于 devfreq 和 cpufreq 的记录
    前言本文主要介绍了/sys/class/devfreq和/sys/devices/system/cpu/cpufreq目录,以及如何手动管理和监控设备频率和CPU频率。同时提供了简单的Python脚本,用于打印设备和CPU的频率信息。环境信息:硬件:FriendlyNanoPi-R6S固件:rk3588-usb-debian-bullseye-minimal-6......