项目三:学会如何使用python爬虫请求库(小白入门级)
根据上一篇文章我们学会的如何使用请求库和编写请求函数,这一次我们来学习一下爬虫常用的小技巧。
自定义Headers
Headers是请求的一部分,包含了关于请求的元信息。我们可以在requests
调用中传递一个字典来自定义Headers。代码如下
import requests
headers = {'User-Agent': 'My Custom User Agent','Accept': 'application/json','Authorization': 'Bearer YOUR_ACCESS_TOKEN','Content-Type': 'application/json'
}
res = requests.get(url='https://www.baidu.com/', headers=headers)
print(res.headers)
输出结果
如果输出的代码看不懂,可以看下面代码对比图片读懂代码。
这些头部信息对于开发者和网络管理员来说非常重要,因为它们提供了关于服务器响应和行为的详细信息。理解这些头部可以帮助你更好地处理HTTP请求和响应,以及优化Web应用程序的性能和安全性。
{'Accept-Ranges': 'bytes', //指示服务器支持的请求范围类型
'Cache-Control': 'no-cache', //指定了响应的缓存策略'Connection': 'keep-alive', //指示连接是否应该在请求完成后保持打开状态'Content-Length': '227', //响应内容的字节长度
//定义了哪些内容可以被加载到页面上,以及页面可以与哪些外部资源交互。这个头部用于提高安全性,防止跨站脚本(XSS)攻击'Content-Security-Policy': "frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;", 'Content-Type': 'text/html', //响应内容的媒体类型'Date': 'Mon, 15 Apr 2024 09:46:00 GMT', //响应生成的日期和时间'P3p': 'CP=" OTI DSP COR IVA OUR IND COM ", CP=" OTI DSP COR IVA OUR IND COM "', //公共隐私政策项目(P3P)的头部,用于定义网站的隐私策略'Pragma': 'no-cache', //与Cache-Control类似,Pragma是一个HTTP/1.0的缓存指令,no-cache表示响应不应该被缓存。'Server': 'BWS/1.1', //服务器软件的名称和版本'Set-Cookie': 'BD_NOT_HTTPS=1; path=/; Max-Age=300, BIDUPSID=F36C5CA8D21142BD74B5207C59287DBD; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1713174360; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BAIDUID=F36C5CA8D21142BD2FFC0E76C39C86DD:FG=1; max-age=31536000; expires=Tue, 15-Apr-25 09:46:00 GMT; domain=.baidu.com; path=/; version=1; comment=bd', //设置一个或多个Cookie,用于维持用户会话、跟踪用户行为等'Traceid': '1713174360037795661812152107203751720698', //服务器为请求生成的唯一追踪ID,用于调试和日志记录'X-Ua-Compatible': 'IE=Edge,chrome=1', //指示服务器支持的浏览器兼容性'X-Xss-Protection': '1;mode=block'} //浏览器的安全头部,用于启用XSS保护机制
自定义Cookies
Cookies通常用于维持用户的会话状态。我们可以通过cookies
参数在requests
调用中传递一个RequestsCookieJar
对象或者一个字典来自定义Cookies。代码如下
# 导入requests库
import requests
# 自定义cookies
cookies = {'cookies_are':'working'}
# 发起请求
res = requests.get(url='http://httpbin.org/cookies', cookies=cookies)
# 打印响应内容
print(res.text)
这个代码主要用来维持会话状态
输出结果
提示:自定义Cookies在爬虫中通常用于维持会话(如登录)、绕过防爬机制、跟踪用户行为、处理Cookies限制等。
重定向(allow_redirects)
在HTTP请求中,重定向是指服务器指示客户端去访问另一个URL的响应。重定向是一种常见的Web机制,用于URL变更、负载均衡、内容移动等场景。
HTTP状态码中,301(Moved Permanently)、302(Found)、303(See Other)、307(Temporary Redirect)和308(Permanent Redirect)都是表示重定向的响应码
在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问,这个行为由llow_redirects
参数来控制。
使用
allow_redirects
参数的场景包括:
- 当你知道URL已经更新,并且想要直接访问新URL时,可以禁用重定向,以获取重定向响应中的新URL。
- 当你需要分析重定向链时,可以通过禁用重定向并检查
response.history
来获取所有的重定向记录。- 当服务器返回的重定向可能包含敏感信息或不安全的内容时,禁用重定向可以防止客户端无意中访问这些URL。
通过灵活使用
allow_redirects
参数,可以更好地控制requests
库的行为,以适应不同的网络请求场景。
重定向是一种服务器端行为,它通过将用户的请求从一个URL重定向到另一个URL来提供更好的用户体验和管理网站内容。重定向可以有以下作用:
-
网站更改:当网站管理员决定更改网站的URL结构或移动页面时,重定向可以确保现有的链接仍然有效,并将用户正确地引导到新的位置。
-
域名重定向:当网站有多个域名时,可以使用重定向将用户引导到主要域名,以确保所有流量都指向一个位置。
-
防止重复内容:重定向可以确保用户访问正确的标准化URL,从而避免搜索引擎索引多个相同内容的URL。
-
统一资源:对于移动设备和桌面设备,可以使用重定向将用户引导到适合其设备的不同版本的网站。
在网络编程中,允许重定向可以确保客户端能够跟随服务器发送的重定向指令,从而获得正确的资源。
简单代码如下
#导入requests模块
import requests
#发送请求 允许重定向
response = requests.get('http://example.com', allow_redirects=True)
#输出响应内容
print(response.url)
注意:重定向(False=关闭重定向,True=开启重定向
输出结果:
最后一行打印出了响应的URL,这对于检查是否发生了重定向是很有用的。
重定向有许多操作,这里选用一个简单的部分,能够让大家一眼看懂
禁止证书验证(verify)
在爬虫过程中,SSL证书是用于在客户端(爬虫)和服务器之间建立安全通信的重要工具。而需要SSL证书验证有以下原因:
-
数据加密: SSL证书确保了客户端和服务器之间的数据传输是加密的。这意味着即使数据在传输过程中被拦截,攻击者也无法轻易读取或修改数据内容。
-
身份验证: SSL证书还用于验证服务器的身份。当爬虫访问一个使用SSL证书的服务器时,它可以检查证书是否由受信任的证书颁发机构(CA)签发,以及证书中的信息是否与服务器声称的身份匹配。这有助于防止中间人攻击和欺诈网站。
-
信任和声誉: 使用有效的SSL证书可以提高网站的信誉和用户的信任度。对于爬虫来说,确保与信任的服务器通信可以提高爬取数据的质量和安全性。
-
遵守法规: 某些法律法规要求网站和服务必须使用SSL证书来保护用户数据。作为爬虫开发者,遵守这些法规可以避免潜在的法律问题。
-
浏览器和库的要求: 现代浏览器和网络库(如
requests
)默认要求使用SSL证书。如果没有有效的证书或证书验证失败,浏览器和库可能会拒绝连接或发出警告。 -
防止数据泄露: SSL证书有助于防止敏感数据(如登录凭据、个人信息等)在传输过程中被窃取。这对于爬取可能包含敏感信息的网站尤为重要。
简单案例代码
import requests# 关闭SSL证书验证
response = requests.get('https://www.baidu.com/', verify=False)
这个代码用来关闭证书验证,通常情况下,不建议关闭,除非你信任这个网络环境,否则可能会数据泄密或者中间人攻击。大家自行验证即可😎(っ °Д °;)っ
输出结果
解释:输出的信息包含以下内容
-
InsecureRequestWarning: 这是一个警告,由
urllib3
库发出,提示你的HTTPS请求没有进行证书验证。在Python 3中,如果你使用urllib3
库进行HTTPS请求,而没有指定cert_reqs='CERT_REQUIRED'
来启用证书验证,就会收到这个警告。这是因为没有证书验证的HTTPS请求容易受到中间人攻击(MITM),所以强烈建议启用证书验证以保证通信安全。 -
警告链接: 警告信息中提供了一个链接,指向
urllib3
的官方文档,其中详细介绍了如何处理SSL警告和如何配置证书验证。 -
HTML内容: 这部分是百度首页的HTML源码片段。它包含了百度的登录链接、搜索框、导航链接以及其他一些页面元素。这个HTML片段可能是从网络请求的响应中提取出来的
设置超时(timeout)
超时时间应该根据目标服务器的响应速度和网络状况来合理设置。过短的超时时间可能导致不必要的超时异常,而过长的超时时间可能会导致爬虫效率降低。因此要合理设置,提高爬虫效率
import requests
# 设置超时
requests.get('https://www.baidu.com/', timeout=10)
print('ok')
输出结果
这表示爬虫没有超时,并成功响应信息。
好了今日分享到此一游,各位点个赞,关注我不迷路
相关文章:

项目三:学会如何使用python爬虫请求库(小白入门级)
根据上一篇文章我们学会的如何使用请求库和编写请求函数,这一次我们来学习一下爬虫常用的小技巧。 自定义Headers Headers是请求的一部分,包含了关于请求的元信息。我们可以在requests调用中传递一个字典来自定义Headers。代码如下 import requests h…...

【热门话题】PyTorch:深度学习领域的强大工具
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 PyTorch:深度学习领域的强大工具一、PyTorch概述二、PyTorch核心特性…...

SQL注入sqli_libs靶场第一题
第一题 联合查询 1)思路: 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限,爆库,爆版本号 爆表,爆列,爆账号密码 2)解题过程࿱…...

QT_day3
完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配…...

使用ADO.NET访问数据库
目录 访问数据库的步骤 1、建立数据库 2、设置链接参数 (1)web网页和数据库连接的方法一 (2)web网页和数据库连接的方法二 3、建立链接对象 4、显示数据库 5、数…...

SpringBoot的旅游管理系统+论文+ppt+免费远程调试
项目介绍: 基于SpringBoot旅游网站 旅游管理系统 本旅游管理系统采用的数据库是Mysql,使用SpringBoot框架开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 (1&…...

数据结构---线性表
1,顺序表实现---动态分配 #include<stdlib.h> #define InitSize 10 typedef struct {int *data;//静态分配int length;int MaxSize; }SqList; void InitList(SqList& L) {L.data (int*)malloc(InitSize * sizeof(int));//分配空间L.length 0;L.MaxSize…...
MySQL 8.0 字符集问题导致报错
报错: ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE) MySQL 8.0引入了一些新的字符集和排序规则,并对现有的进行了改进。在MySQL 8.0中&#…...

单路高清HDMI编码器JR-3211HD
产品简介: JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品,该产品具有支持1路高清HDMI音视频采集功能, 1路3.5MM独立外接音频输入,编码输出双码流H.264格式,音频MP3/AAC格式。编码码率可调,画面质…...
分库,分表,分区,分片
MySQL: 是一个开源的关系型数据库管理系统,主要用于存储和管理数据。它提供了命令行接口, SQLyog: 是一个图形化的客户端软件,专门用于管理和操作MySQL数据库。 它提供了一个直观的用户界面,简化了MySQL数据…...

【详解算法流程+程序】DBSCAN基于密度的聚类算法+源码-用K-means和DBSCAN算法对银行数据进行聚类并完成用户画像数据分析课设源码资料包
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。 与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇, 并可在噪声的空间数据…...
java es相关操作
一.es 后期修改分片数量 在Elasticsearch中一旦索引创建后,分片的数量就不能直接更改。如果需要更改分片的数量,你需要按照以下步骤操作: 创建一个新的索引,并指定所需的分片数量。 将旧索引的数据复制到新索引中。 关闭旧索引…...

腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧
当今时代数字化经济蓬勃发展人们的生活逐渐便利,类似线上购物、线上娱乐、线上会议等数字化的服务如雨后春笋般在全国遍地生长,在人们享受这些服务的同时也面临着各式各样的挑战,如网络数据会不稳定、个人隐私容易暴露、资产信息会被攻击等。…...
机器视觉图形处理软件介绍
机器视觉图形处理软件介绍 一.VisionPro 康耐视公司推出的 系统,具有快速而强大的应用系统开发能力。可快速建立原型和易于集成 。具有高可靠性、硬件灵活性。VisionPro 提供了易于应用的原型、发展和应用。VisionProQuickStart 原型环境加速了强大机器视觉系统的…...
C# WinForm简介
Winform是什么? .Net开发平台中对Windows Form的简称,基于.Net Framework平台 的客户端开发技术,一般使用C#编程。Windows 风格的控件,以及事件,直接使用,开发快速。Windows Form:Windows窗体Windows应用程…...
概念:CPU、内存、磁盘、Android内存分配
cpu CPU的全称是Central Processing Unit,中文名称为中央处理单元。它是计算机硬件的核心部件,负责解释计算机程序指令并处理计算机软件中的数据。简言之,CPU执行计算机程序中的操作指令,包括基本算术、逻辑、控制和输入/输出&am…...
Vue 图片加载失败显示默认图片
方法一:通过onerror属性加载默认图片 <img :src"img" :onerror"defaultImg" /><script> export default {data() {return {img: , // 访问图片的ip地址defaultImg: this.src ${require(/assets/images/right/default-person.png)…...

【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流
目录 前言 一、Sentinel下载 二、SpringBoot 整合 Sentinel 三、流控规则 章末 前言 小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentin…...

【示例】MySQL-SQL语句优化
前言 本文主要讲述不同SQL语句的优化策略。 SQL | DML语句 insert语句 插入数据的时候,改为批量插入 插入数据的时候,按照主键顺序插入 大批量插入数据的时候(百万),用load指令,从本地文件载入&#x…...
QT 线程的使用
1.头文件: #include<QThread> 2.在.h文件中定义全局: QThread* threadTraj; void threadTrajProcess();//回调函数 3.在.cpp文件中: threadTraj new QThread();//初始化 //连接槽函数 QObject::connect(threadTraj, &QThre…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
在Spring Boot中集成RabbitMQ的完整指南
前言 在现代微服务架构中,消息队列(Message Queue)是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件,支持多种消息协议,具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

基于Python的气象数据分析及可视化研究
目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...