【requests模块上】——02爬虫基础——如桃花来
目录索引
- ==requests请求:==
1. 基于get请求:
- *基础写法:*
- *带参数的get请求:*
2. 基于post请求:
- ==获取数据:==
1. 获取json数据:
2. 获取二进制数据:
- ==初步伪装小爬虫——添加headers:==
引入:
requests是python的第三方库,采用的是Apache2 Licensed开源协议的HTTP库
换言之,也就是requests是一个Python代码编写的HTTP请求库,方便在代码中模拟浏览器发送http请求。
requests请求:
#举个例子:
import requests
#取一个变量名来接收请求
response = requests.get('https://www.baidu.com/')
print(response)#响应体对象(响应源码+响应状态码+响应URL)
print(response.text)#查看响应体的内容
print(type(response.text))#查看响应内容的数据类型
print(response.status_code)#查看响应状态码
print(response.url)#查看响应的url
呈现效果:
注意: 这里的虚线是为了区分特意添加的,没写在代码中。
下面讲述请求方法,主要是get请求和post请求
requests.get('http://httpbin.org/get') # GET请求
requests.post('http://httpbin.org/post') # POST请求
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
1. 基于get请求:
基础写法:
- 测试网站:http://httpbin.org/get(这是一个测试网站)
import requests
url = "http://httpbin.org/get" #把我们的目标站点保存在url变量中
r = requests.get(url)#发出get请求
print(r.status_code)#获取状态码
print(r.text)#获取响应内容
print(type(r.text))#text属性里面提取的信息都是字符串类型
带参数的get请求:
第一种写法:
- 把参数直接跟在网址的后方
import requests
#https://www.baidu.com/?tn=15007414_8_dg
url = "https://www.baidu.com/?tn=15007414_8_dg"
r = requests.get(url)
print(r.status_code)#获取状态码,200为正常
print(r.text)
在网址的后面由?来传递参数,每个属性之间用&符连接,比如:http://httpbin.org/get?name=lisi&age=10。
第二种写法:
- 把参数采用关键字传参的方式传入(推荐!)
import requests
#把参数单独构建在字典中
data_message = {"name":"xiaoming","sex":"男"
}
url = "http://httpbin.org/get"
r=requests.get(url,params=data_message)#params:携带get请求的参数
print(r.text)
注意:
- get请求的关键字参数是params
- 字典的键值对之间别忘记用逗号隔开
呈现效果:
对比我们可以发现,get请求中我们传入的参数都在args内部。记忆:params中带有ar,那么参数都在args内部。
2. 基于post请求:
测试网站: http://httpbin.org/post
这个网站直接打开是打不开的,因为浏览器不能直接打开post请求,虽然不能直接打开,但是可以通过代码进行测试
import requests
url = "http://httpbin.org/post"
data_message = {"name":"小明","age":10
}
r = requests.post(url,data=data_message)#data:携带post请求的参数
print(r.text)
呈现效果:
注意: post请求的参数是存储在form中的
总结:
- get请求和post请求传递参数的方式是不一样的,get是通过params传递的,post是通过data进行传递的。由开发人员规定。
获取数据:
1. 获取json数据:
json是种数据格式,长得跟字典特别像。具体区别不在这里展开叙述。json和字典可以通过json模块进行转化。
import requests
import json
url = "http://httpbin.org/get"
r = requests.get(url)
print(r.status_code)
a = r.text#获取里面的数据
dict_data = json.loads(a)#将字符串转化为字典类型
print(dict_data)
print(type(dict_data))
呈现效果:
- 试想一下: 我们该如何拿到User-Agent后面的数据?
#只写了添加代码
res = dict_data["headers"]["User-Agent"]#涉及字典嵌套的知识
print(res)
- 但是这样太麻烦了,下面有一种方法可以直接获取json数据的源代码,数据类型是字典
- 注意: json模块是模块,json()方法是方法,注意区别。使用json方法不需要引入json模块
import requests
url = "http://httpbin.org/get"
r = requests.get(url)
print(r.status_code)
a = r.json()#获取里面的数据
print(a)
print(type(a))#自动将数据类型转换成了字典
呈现效果:
2. 获取二进制数据:
- 获取二进制数据的时候,不用text属性获取,而是使用content属性专门获取二进制数据
- 二进制数据是以字节形式存在的:
bytes类型是指一堆字节的集合,在python中以b开头的字符串都是bytes类型- 一个字节使用两个16进制数来表示: 1个16进制数对应4个二进制数位,2个16进制数位对应8个二进制数位,所以一个字节占8位
Bytes类型的作用:
- 1, 在python中, 数据转成2进制后不是直接以0101010的形式表示的,而是用一种叫bytes(字节)的类型来表示
- 2,计算机只能存储2进制, 我们的字符、图片、视频、音乐等想存到硬盘上,也必须以正确的方式编码成2进制后再存。
记住一句话: 在python中,字符串必须编码成bytes后才能存到硬盘上
总结:
- 获取正常文本数据用==.text属性==
- 获取json数据用==.json()方法==
- 获取二进制数据用==.content属性==
初步伪装小爬虫——添加headers:
- headers携带伪装参数,是浏览器用户身份的标识,缺少的话服务器会认为你不是一个正常的浏览器用户,而是一个爬虫程序,阻止你进行访问。
- 常用添加的属性为:user-agent
#举个例子:网址https://www.zhihu.com/explore
url = "https://www.zhihu.com/explore"
#需要组建身份信息,复制浏览器中的请求报文中的user-agent,需要注意的是复制粘贴的时候必须要写的字典的形式。
headers_message = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"
}
r = requests.get(url,headers = headers_message)
print(r.status_code)
print(r.text)
相关文章:

【requests模块上】——02爬虫基础——如桃花来
目录索引 requests请求:1. 基于get请求:*基础写法:**带参数的get请求:* 2. 基于post请求: 获取数据:1. 获取json数据:2. 获取二进制数据: 初步伪装小爬虫——添加headers: 引入&…...

Springboot +Flowable,详细解释啥叫流程实例(一)
一.简介 上一篇中学习了Flowable 中的流程模板(流程定义)的部署问题,这一篇来学习什么叫流程实例。 部署之后的流程模板,还不能直接运行,例如我们部署了一个请假流程,现在 张三想要请假,他就需…...

信息安全复习十:Web与电子商务安全
一、章节梗概 1.信息安全的学科内容 2.Web和电子商务安全问题提出 3.安全套接字协议SSL与传输层安全协议TLS 4.安全电子交易(SET)简要介绍 复习: 密码学内容:对称密钥密码、公开密钥密码、报文鉴别 PKI:数字签名、数字证书、信任关系 身份认…...
flutter 启动其他app server或者页面失败
1.目标Service 设置 android:exported"true" 2.目标Service需要声明自定义权限。客户端需要声明权限。 3.目标Service需要添加<intent-filter></intent-filter> 检查以上的声明和权限, 如果还是不行 说明是 Android 11引入了*包可见性*’ …...

【linux-进程2】进程控制
🌈环境变量 🍄初识 系统带的命令可以直接运行(ls ll命令等),但是我们自己写的命令必须要带上路径才能运行(./myproc),这是什么原因导致的?如果我们也想自己写的命令直接…...
【五一创作】多域名环境和Office 365混合部署方案
目录 一、多域名环境是什么? 二、Office 365是什么? 三、多域名环境与Office 365的结合 总结 一、多域名环境是什么? 多域名环境指的是一个企业拥有多个域名,这些域名可能隶属于不同的子公司、部门或者品牌,但是都归属于同一个母公司。例如,一个中国电信集团旗下有…...
Vue:路由route
一、概念 1、组成 每一个路由都由 key 和 value 组成。 keyvalue路由 route。 2、本质 路由的本质:一个路由表达了一组对应关系。路由器的本质:管理多组对应关系。 3、路由的工作原理 点击之后路径变化——>路由器监视到变化——>根据路径…...

Windows系统被faust勒索病毒攻击勒索病毒解密服务器与数据库解密恢复
在近期,一种名为faust后缀的勒索病毒威胁已经引起了全球计算机系统安全领域的关注。faust勒索病毒是一种基于RSA加密算法的恶意软件,能够加密目标计算机系统上的所有文件,并向用户勒索赎金来承诺解密恢复操作。下面为大家介绍一下Windows系统…...

Java面试题总结 | Java面试题总结7- Redis模块(持续更新)
Redis 文章目录 Redisredis的线程模型Redis的Mysql的区别Redis和传统的关系型数据库有什么不同?Redis常见的数据结构zset数据结构Redis中rehash过程redis为什么不考虑线程安全的问题呢Redis单线程为什么还能这么快?为什么Redis是单线程的?red…...

虹科案例 | 如何通过智能、非接触式测量解决方案,提高起重机的安全和效率?
PART 1 案例详情 自建造初期以来,起重机行业已经走了很长一段路。技术的使用在行业进步中发挥了重要作用,降低了使用桥式起重机的危险性。特别是,智能、非接触式测量解决方案通过使用高架升降机更安全、更高效、更高效,为行业的进…...

流程图拖拽视觉编程-流程编辑器
目录 一、简介 二、流程编辑器-视图实现 三、参考资料 一、简介 前期文章: 流程图拖拽视觉编程--概述_Jason~shen的博客-CSDN博客 本期内容: 本期将介绍流程编辑器模块的实现方法,效果图如下所示。该模块基于QT Graphics/View实现&…...
6.hashcode与equals区别与联系
1.hashCode介绍 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。 这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。 2.equals介…...

智能家居“落地者”:三翼鸟用场景方案持续链接大众消费
互联网分析沙龙(techxue)原创 作者 | 锡海 编辑 | 七喜 从上海车展再到AWE2023展会,只要有大型活动的地方,都能看到人潮汹涌的景象,久违的烟火气又回来了。数据显示,社会消费已出现较为强劲反弹࿰…...

【MATLAB图像处理实用案例详解(12)】——利用BP神经网络实现图像压缩
目录 一、图像压缩二、BP神经网络实现图像压缩原理三、算法步骤3.1 图像块划分3.2 归一化3.3 建立BP神经网络3.4 保存结果 四、效果演示 一、图像压缩 常见的文件压缩软件如WinZip、WinRAR等采用的是无损压缩,能够完全恢复原文件内容。多媒体信息具有信息量大、冗余…...

java学习之枚举
目录 一、枚举引出 二、分析问题 三、 解决方案-枚举 四、枚举的二种实现方式 五、应用案例 六、小结 一、枚举引出 package enum_;public class Enumeration01 {public static void main(String[] args) {Season spring new Season("春天", "温暖")…...

IPsec中IKE与ISAKMP过程分析(主模式-消息2)
IPsec中IKE与ISAKMP过程分析(主模式-消息1)_搞搞搞高傲的博客-CSDN博客 IPsec协议族中IKE(Internet Key Exchange)是一种基于ISAKMP的协议,它为建立IPSec安全通信隧道提供了一种无痕密钥交换的机制。简单来说ÿ…...

KDZR-10A三相直流电阻测试仪
一、产品概述 直流电阻的测量仪是变压器、互感器、电抗器、电磁操作机构等感性线圈制造中半成品、成品出厂试验、安装、交接试验及电力部门预防性试验的项目,能有效发现感性线圈的选材、焊接、连接部位松动、缺股、断线等制造缺陷和运行后存在的隐患。 为了满足感…...

C语言入门篇——指针篇
目录 1、指针 1.1内存地址 1.2基地址 1.3指针变量 2、指针类型 2.1指针-整数 2.2指针的解引用 3、特殊指针 3.1野指针 3.2空指针 4、指针运算 4.1指针-指针 4.2指针的关系运算 5、指针和数组 6、二级指针 7、指针数组 1、指针 1.1内存地址 内存是电脑上特别重…...

Python小姿势 - Python学习笔记:如何使用Python创建一个简单的计算器
Python学习笔记:如何使用Python创建一个简单的计算器 在本教程中,我们将学习如何使用Python创建一个简单的计算器。我们将学习如何使用Python的内置函数input()和print(),以及如何使用Python的运算符来完成这个项目。 首先,让我们…...
庖丁解牛 - FLAME: Taming Backdoors in Federated Learning
文章目录 论文笔记 - FLAME: Taming Backdoors in Federated Learning1. 基本信息2. 研究动机3. 基本原理3.1 面临挑战分析3.2 FLAME 算法总体概述3.3 FLAME 算法设计思想3.3.1 Dynamic Model Filtering3.3.2 Adaptive Clipping3.3.3 Adaptive Noising4. 结论论文笔记 - FLAME:…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...