Python爬虫:数据获取requests

news2024/11/17 15:45:41

1. 基本用法

1.1. 安装requests库

pip3 install requests

1.2. 发送HTTP请求

requests.request(method, url, **kwargs)

1.3. 发送GET请求

requests.get(url, params=None, **kwargs)

1.4. 发送POST请求

requests.post(url, data=None, json=None, **kwargs)

1.5. 发送PUT请求

requests.put(url, data=None, **kwargs)

1.6. 发送DELETE请求

requests.delete(url, **kwargs)

1.7. 发送HEAD请求

requests.head(url, **kwargs)

1.8. 创建一个会话对象

requests.session()

1.9. 获取重定向目标

requests.get_redirect_target(response)

1.10. 发送PATCH请求

requests.patch(url, data=None, **kwargs)

扫一扫欢迎关注,一起学习!

1.11. response返回

通过response对象的各种属性和方法来查看响应的各项信息

  1. .status_code:返回响应状态码,例如200表示请求成功,404表示请求的资源不存在等;
  2. .headers:返回响应头信息,是一个字典类型;
  3. .text:返回响应的内容,是一个字符串类型;
  4. .content:返回响应的二进制内容,是一个bytes类型;
  5. .cookies:返回响应的cookie信息,是一个字典类型;
  6. .json():返回响应的json格式数据,如果响应内容不是json格式,则会抛出异常;
  7. .encoding:返回响应内容的编码格式;
  8. .url:返回响应的URL地址;
  9. .history:返回请求历史,是一个列表类型,其中每个元素都是一个response对象。

2. GET与POST请求方式

GET和POST是HTTP协议中最常用的两种请求方法,它们在参数传递、安全性、缓存以及URL长度上有所区别。具体分析如下:

  1. 参数传递:GET请求将参数包含在URL中,而POST请求通过request body传递参数。这意味着GET请求的参数会直接显示在浏览器的地址栏中,而POST请求的参数不会显示。
  2. 安全性:POST请求通常被认为比GET请求更安全,因为POST请求的数据不会像GET请求那样显示在URL中,从而减少了敏感信息泄露的风险。
  3. 缓存:GET请求的结果可以被浏览器缓存,这使得重复访问同一资源时可以更快地加载页面。而POST请求通常不会被缓存,因为每次提交的数据可能不同,缓存可能会导致数据不一致。
  4. URL长度:由于GET请求的参数是附加在URL上的,所以URL的长度受到限制。如果参数过多或过长,可能会导致服务器拒绝处理请求。POST请求则没有这个问题,因为参数是在请求体中发送的。

总的来说,GET请求适合用于获取数据,而POST请求适合用于提交数据。在实际开发中,选择使用哪种请求方法取决于具体的需求和场景。

2.1. GET

import requests


url = 'https://www.baidu.com/s'
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 方式1
rep = requests.get('https://www.baidu.com/s?ie=UTF-8&wd=中国', headers=headers)

# 方式2
params = {
    'ie' : 'UTF-8',
    'wd' : '中国'
}
rep = requests.get(url,params=params ,headers=headers)

print(rep.text)

2.2. POST

import requests

url = 'https://fanyi.qq.com/api/translate'
data = {
    'source': 'auto',
    'target': 'en',
    'sourceText': '中国'
}
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)

import requests

url = 'https://fanyi.qq.com/api/translate'
data = {
    'source': 'auto',
    'target': 'en',
    'sourceText': '中国'
}
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
rep = requests.post(url, data=data, headers=headers)
print(rep.text)

{
  "translate": {
    "errCode": 0,
    "errMsg": "",
    "source": "zh",
    "target": "en",
    "records": [
      {
        "sourceText": "中国",
        "targetText": "China"
      }
    ],
    "full": true,
    "options": {}
  },
  "dict": null,
  "suggest": null,
  "errCode": 0,
  "errMsg": "ok"
}

2.3. 小结

  1. get请求中带的参数为params,post使用的参数为data。

  1. 运行后返回为空,一般被限制了User-Agent。

3. 请求头headers

Headers在HTTP请求中扮演着重要的角色,它们为服务器提供额外的信息,帮助服务器正确处理请求。例如,通过设置User-Agent可以模拟浏览器行为,避免被网站识别为爬虫并封锁。

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Cookie: PHPSESSID=d1s5jnrl3kjhg5iuj65t54rd5

以下是一些常见的HTTP请求头字段及其含义:

3.1. User-Agent

表明发送请求的用户代理(通常是浏览器)的信息。服务器通过这个字段来识别客户端使用的操作系统、浏览器类型和版本等。

3.2. Accept

告诉服务器客户端能够接受哪些类型的媒体,这样服务器可以根据客户端的偏好返回相应的内容。例如,Accept: text/html 表示客户端希望接收HTML格式的响应。

3.3. Content-Type

当客户端需要发送数据给服务器时,这个字段指定数据的MIME类型。例如,Content-Type: application/json 表示客户端发送的是JSON格式的数据。

3.4. Accept-Encoding

表示客户端能够解码哪些编码方式的数据。这通常用于指定客户端是否支持压缩编码,如Accept-Encoding: gzip。

3.5. Cookie

用于存储会话信息或其他持久性数据。服务器可以通过设置Cookie来维护客户端的状态。

3.6. Authorization

用于提供认证信息,如Bearer tokens或HTTP基本认证的用户名和密码。

3.7. Connection

控制是否关闭网络连接,或者是否使用持久连接。例如,Connection: keep-alive 表示使用持久连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

传感器类总结(一)MPU9250 3-2程序关于IIC的底层程序

关于IIC的逻辑和底层协议可以看之前总结的 #IIC 通信协议 1、读写数据 1.1、写数据 发送N个字节程序的流程: 1、发送起始信号 2、发送从机地址和写 3、等待从机发回应答信号 4、发送第一字节数据 等待应答 5、发送下一字节数据 等带应答或非应答信号 6、发送停止信号停止发送…

Kafka核心概念、数据存储设计及Partition数据文件 生产者负载均衡策略、批量发送技巧、消息压缩手段、消费者设计

关注公众号,发送 “面试题” 即可免费领取一份超全的面试题PDF文件!!!! 1、kafka的概念 Kafka 是一个开源的分布式流处理平台,最初由LinkedIn开发,后来成为Apache软件基金会的一个顶级项目。它…

【解决】Unity 工程无法正常打开而崩溃问题

开发平台:Unity 2022.3.17f1c1 一、问题描述 访问 Unity 工程等待 Open Projet(busy for 时间),出现崩溃、闪退等情况,导致无法正常进入Unity编辑页面。 二、问题分析 笔者在 URP 渲染管线下处理 Obi Fluid 流体插件 D…

detectron2的read_image方法

在看代码的时候,看到一行注释:use PIL, to be consistent with evaluation 说是用PIL方法加载,却又看见了BGR这种表述,后面的调用也都是cv2格式: 那我就要看下这里面是怎么实现的了,找到了read_image函数&…

知识点积累系列(一)golang语言篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第一篇,记录golang语言相关的知识点 1.结构体的mapstructure是什么 mapstructure:"default" mapstructure是一个Go语言的库,用于将一个map中的值映射到…

通过手写简易版RPC理解RPC原理

RPC是什么 所谓的RPC其实是为了不同主机的两个进程间通信而产生的,通常不同的主机之间的进程通信,程序编写需要考虑到网络通信的功能,这样程序的编写将会变得复杂。RPC就来解决这一问题的,一台主机上的进程对另外一台主机的进程发…

【2024程序员必看】鸿蒙应用开发行业分析

鸿蒙操作系统沉浸四年,这次终于迎来了破局的机会,自从2023年华为秋季发布会上宣布鸿蒙 Next操作系统不在兼容Android后,就有不少大厂开始陆续与华为达成了鸿蒙原生应用的开发合作,据1月18日华为官方宣布110多天的产业合力“突进”…

log4j2 无垃圾稳态日志 Garbage-free Steady State Logging

无垃圾稳态日志 垃圾收集暂停是导致延迟峰值的常见原因,对于许多系统来说,需要花费大量精力来控制这些暂停。 许多日志库,包括以前版本的Log4j,在稳态日志记录期间分配临时对象,如日志事件对象、字符串、char数组、字…

RocksDB是如何实现存算分离的

核心参考文献: Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde,…

基于YOLOv7算法的高精度实时安全帽和背心目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法的高精度实时安全帽和背心目标检测系统可用于日常生活中检测与定位安全帽和安全背心,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标…

B样条基函数

​定义:令U{u0,u1,…,um}是一个单调不减的实数序列,即ui≤ui1,i0,1,…,m-1。其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p1阶)B样条基…

短视频界的变革者:上海 AI lab 发布 Vlogger,几句话生成分钟级视频

现如今,vlog 已经成为我们日常生活的重要组成部分。无论是看视频学习休闲、记录珍贵瞬间还是分享生活见闻,视频已经成为人们表达创意和观点的独特媒介。 然而,与几秒钟的短视频不同,要创作出引人入胜、生动有趣的长视频&#xff…

十分钟学会用springboot制作微信小程序富文本编辑器

1.1 富文本模型设计 在构建富文本编辑器系统时,首先需要设计一个合适的富文本模型。 CREATE TABLE IF NOT EXISTS rich_texts (id INT PRIMARY KEY AUTO_INCREMENT,title VARCHAR(255),content TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );这个表包括…

一键转换MOV至MP3:轻松删除原视频,释放存储空间!

你是否曾经有一个MOV格式的视频文件,想要提取其中的音频却苦于没有合适的工具?现在,有了我们的全新视频剪辑工具,这个烦恼全部消失!我们为你提供一键式解决方案,将MOV视频文件快速转换为MP3音频格式。 首先…

PyNest 一个可以搭建微服务的 Python 包

PyNest 在构建 Python API 和微服务方面崭露头角,解决了 FastAPI 中存在的关键问题,因此成为卓越的框架。凭借其模块化的架构和先进的特性,PyNest 在 2024 年及以后有望成为 Python 开发者的首选选择。 随着 Python 生态系统的不断成熟&…

YAYI-UIE: 一个用于通用信息提取的聊天增强的指令微调框架

1、写作动机: 最近的研究提出了基于大型语言模型的方法,以统一地建模不同的信息提取任务。然而,这些现有方法在处理英语以外的中文语言的信息提取能力方面存在不足。 2、主要贡献: 提出了YAYI-UIE,一个端到端的聊天…

Prometheus+grafana配置监控系统

使用docker compose安装 方便拓展, 配置信息都放在在 /docker/prometheus 目录下 1.目录结构如下 . ├── conf │ └── prometheus.yml ├── grafana_data ├── prometheus_data └── prometheus_grafana.yaml2.创建目录文件 mkdir /docker/prometheus &&am…

Java面试题之 IO(四)

Java面试题之 IO(四) 文章目录 Java面试题之 IO(四)随机访问流 文章来自Java Guide 用于学习如有侵权,立即删除 随机访问流 这里要介绍的随机访问流指的是支持随意跳转到文件的任意位置进行读写的 RandomAccessFile 。…

C# Onnx yolov8 仪表指针检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 仪表指针检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T11:19:38.828556 author:Ultralytics task:detect license:AGPL-…

C++ 哈希 开放定址法

哈希算法 哈希,是一种算法思想吗,它的核心是映射,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表) 在STL 中,提供了两个使用哈希底层实现的容器 unordered_set 和 …