Python网络爬虫 学习笔记(1)requests库爬虫
文章目录
- Requests库网络爬虫
- requests.get()的基本使用框架
- requests.get()的带异常处理使用框架(重点)
- requests库的其他方法和HTTP协议(非重点)
- requests.get()的可选参数
- 网络爬虫引发的问题(非重点)
- 常见问题:网页禁止Python爬虫访问
Requests库网络爬虫
Requests库概述:Requests库是最简单和最基础的Python网络爬虫库,该库提供了七种主要方法。这七种方法中,request方法是最基础的,其他方法都是通过调用request方法来实现的。
requests.get()的基本使用框架
基本语法:r=requests.get(url)
语法解释:构造一个向服务器请求资源的Request对象,返回值是一个包含服务器资源的Response对象。
完整形式语法:requests.get(url,params=None,**kwargs)
- params:在url中增加的额外参数,是可选的参数。
- **kwargs:12个控制访问的参数。
Response对象的属性:
- status_code:状态码。是200表示访问成功,不是200表示访问失败。
- header:网页的头部
- List item
信息。
- text:HTTP响应的字符串形式,也就是url对应的页面内容。
- encoding:从HTTP的头部所猜测的网页编码方式。如果header中不存在charset字段,则默认编码方式为ISO-8859-1。
- apparent_encoding:从HTTP响应的内容中分析出的编码方式。往往需要用apparent_encoding来替代encoding。
- content:HTTP响应内容的二进制形式。
使用get方法的基本流程:检查网页状态码,如果是200则继续,否则产生异常;
get方法使用的完整例子(爬取百度主页):
# 首先需要导入requests库
import requests
# 使用get方法爬取百度主页的内容
r=requests.get("https://www.baidu.com")
# 判断网页访问是否成功
if r.status_code==200: # 网页访问成功# 如果header中不存在charset字段,则encoding采用默认编码方式,很可能解析错误if r.encoding=="ISO-8859-1":# 将网页内容编码方式修改成从内容分析出的编码方式r.encoding=r.apparent_encoding# 输出网页信息print(r.text)
# 网页访问失败
else:print("网页访问失败!")
运行效果:
requests.get()的带异常处理使用框架(重点)
上面的内容中我们通过if语句来判断状态码从而进行后续的步骤,但是状态码的判断本身应该属于异常处理的范畴,通过if语句判断会破坏程序的主体框架,因此有必要使用异常处理的方法来判定状态码。
Requests库的六种常用异常:
- ConnectionError:网络连接错误异常,如DNS查询失败和拒接连接等。
- HTTPError:HTTP错误异常。
- URLRequired:URL缺失异常。
- TooManyRedirects:由于超过最大重定向次数导致的重定向异常。
- ConnectTimeOut:连接远程服务器超时异常。
- TimeOut:请求URL超时产生的超时异常。
raise_for_status方法:如果Response对象的状态码不是200,则产生HTTPError异常。
经过改进的get方法使用例子:
# 首先需要导入requests库
import requests
# 使用get方法爬取百度主页的内容
r=requests.get("https://www.baidu.com")
# 对可能抛出异常的部分放入try块中
try:# 检测Response对象的状态码,判断是否抛出异常r.raise_for_status()# 如果header中不存在charset字段,则encoding采用默认编码方式,很可能解析错误if r.encoding=="ISO-8859-1":# 将网页内容编码方式修改成从内容分析出的编码方式r.encoding=r.apparent_encoding# 输出网页信息print(r.text)
# 检测到异常后执行的语句
except:print("网页访问失败!")
requests库的其他方法和HTTP协议(非重点)
HTTP概述:
- 定义:超文本传输协议,是一个基于请求和响应模式的、无状态的应用层协议。
- URL:HTTP协议采用URL作为定位网络资源的标识,也就是一个URL就对应一个数据资源。
URL格式:https://host[:port][path]
- host:合法的Internet主机域名或IP地址;
- port:端口号,默认端口号为80。
- path:请求资源的路径。
Reuquests库的其他方法:
- request():构造一个请求,是支撑以下各个方法的基础方法。
- get():获取HTML网页的主要方法。
- head():获取HTML网页头部信息的方法。在一些网页资源很大时可以采用此方法以节约带宽。
- post():向HTML网页提交POST请求的方法。可以在URL位置的资源后增加新的数据。
- put():向HTML网页提交PUT请求的方法。向URL位置存储一个资源,覆盖原先URL位置的资源。
- patch():向HTML网页提交局部修改请求的方法。修改该处资源的部分内容。
- delete():向HTML网页提交删除请求的方法。请求删除URL位置存储的资源。
requests.get()的可选参数
params:
- 内容:字典或字节序列,作为参数增加到URL中。
- 作用:将一些键值对增加到URL中,使得访问URL时能够对资源进行筛选。
data:字典、字节序列或文件对象,主要用于向服务器提交内容。
json:
- 内容:json格式的数据(也是HTTP协议最常使用的数据格式)
- 作用:可以作为内容部分向服务器提交。
head:
- 定制访问某个URL的HTTP协议的协议头。
- 可以模拟任何浏览器的任何版本对网站进行访问。
timeout:
- 内容:设置超时时间,以秒为单位。
- 作用:如果超过指定时间内还没有访问成功,将产生TimeOut异常。
proxies:
- 内容:字典类型,设置访问的代理服务器;
- 作用:使用该字段可以有效隐藏用户爬取网页的源IP地址信息。
网络爬虫引发的问题(非重点)
网络爬虫的分类:
- 小规模爬虫:以爬取网页为目的,数据量小,对爬取速度不敏感。类型代表:Requests库。
- 中规模爬虫:用于爬取系列网站,数据量较大,对爬取速度敏感。典型代表:Scrapy库。
- 大规模爬虫:爬取速度非常关键,对于所有网络信息进行爬取,只能定制开发而不能借助第三方库。典型代表:搜索引擎。
网络爬虫带来的问题:
- 资源开销:受限于编写水平和目的,网络爬虫会给Web服务器带来巨大的资源开销。
- 法律风险:服务器上的数据可能有产权归属,因此使用网络爬虫获取数据可能带来法律风险。
- 隐私泄露:网络爬虫可以突破简单的访问控制,从而获得个人被保护的数据。
网络爬虫的限制:
- 来源审查:检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
- 发布Robots协议:告知所有爬虫网站的爬取策略,要求爬虫遵守。
Robots协议:
- 全称:网络爬虫排除标准;
- 作用:告知网络爬虫哪些界面可以抓取,哪些不行;
- 形式:在网站根目录下的robots.txt文件。
- 举例(百度的Robots协议):www.baidu.com/robots.txt
备注:Robots协议是建议而非约束性的,也就是说网络爬虫可以不遵守Robots协议,但是这样可能带来法律风险。如果一个网络爬虫的访问次数和人类访问类似,那么从原则上可以不遵守Robots协议。
常见问题:网页禁止Python爬虫访问
解决方法:设置get函数的header参数,将爬虫伪装成浏览器来访问网页。
方法举例:
-
直接使用Requests爬虫访问亚马逊商城的官网主页,访问失败。
-
在get方法中设置headers参数的内容,模拟使用版本号为5的Mozilla浏览器进行访问(其他内容都不用修改)。
r=requests.get("https://www.amazon.cn/",headers={"user-agent":"Mozilla/5.0"})
- 网页爬取成功(只截取了部分爬取内容)。
相关文章:

Python网络爬虫 学习笔记(1)requests库爬虫
文章目录Requests库网络爬虫requests.get()的基本使用框架requests.get()的带异常处理使用框架(重点)requests库的其他方法和HTTP协议(非重点)requests.get()的可选参数网络爬虫引发的问题(非重点)常见问题…...

Splay
前言 Splay是一种维护平衡二叉树的算法。虽然它常数大,而且比较难打,但Splay十分方便,而且LCT需要用到。 约定 cnticnt_icnti:节点iii的个数 valival_ivali:节点iii的权值 sizisiz_isizi:节点iii的子…...

智能网联汽车ASIL安全等级如何划分
目录一、功能安全标准二、功能安全等级定义三、危险事件的确定四、ASIL安全等级五、危险分析和风险评定六、功能安全目标的分解一、功能安全标准 ISO 26262《道路车辆功能安全》脱胎于IEC 61508《电气/电子/可编程电子安全系统的功能安全》,主要定位在汽车行业&…...

Stable Diffusion 1 - 初始跑通 文字生成图片
文章目录关于 Stable DiffusionLexica代码实现安装依赖库登陆 huggingface查看 huggingface token下载模型计算生成设置宽高测试迭代次数生成多列图片关于 Stable Diffusion A latent text-to-image diffusion model Stable Diffusion 是一个文本到图像的潜在扩散模型ÿ…...

【cuda入门系列】通过代码真实打印线程ID
【cuda入门系列】通过代码真实打印线程ID1.gridDim(6,1),blockDim(4,1)2.gridDim(3,2),blockDim(2,2)【cuda入门系列之参加CUDA线上训练营】在Jetson nano本地跑 hello cuda! 【cuda入门系列之参加CUDA线上训练营】一文认识cuda基本概念 【cuda入门系列之参加CUDA线…...
【Python语言基础】——Python NumPy 数据类型
Python语言基础——Python NumPy 数据类型 文章目录 Python语言基础——Python NumPy 数据类型一、Python NumPy 数据类型一、Python NumPy 数据类型 Python 中的数据类型 默认情况下,Python 拥有以下数据类型: strings - 用于表示文本数据,文本用引号引起来。例如 “ABCD”…...

数据工程师需要具备哪些技能?
成为数据工程师需要具备哪些技能?数据工程工作存在于各个行业,在银行业、医疗保健业、大型科技企业、初创企业和其他行业找到工作机会。许多职位描述要求数据工程师、拥有数学或工程学位,但如果有合适的经验学位往往没那么重要。 大数据开发…...

Cosmos 基础 -- Ignite CLI(二)Module basics: Blog
一、快速入门 Ignite CLI version: v0.26.1 在本教程中,我们将使用一个模块创建一个区块链,该模块允许我们从区块链中写入和读取数据。这个模块将实现创建和阅读博客文章的功能,类似于博客应用程序。最终用户将能够提交新的博客文章&#x…...

Quartz 快速入门案例,看这一篇就够了
前言 Quartz 是基于 Java 实现的任务调度框架,对任务的创建、修改、删除、触发以及监控这些操作直接提供了 api,这意味着开发人员拥有最大的操作权,也带来了更高的灵活性。 什么是任务调度? 任务调度指在将来某个特定的时间、固…...

图解LeetCode——1233. 删除子文件夹(难道:中等)
一、题目 你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。 如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] …...

Doris--简单使用
一、数据表的创建与数据导入 1.1、创建表 1.1.1、单分区 CREATE TABLE table1 (siteid INT DEFAULT 10,citycode SMALLINT,username VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0 -- 聚合模型, value column 使用sum聚合 ) AGGREGATE KEY(siteid, citycode, …...

使用GPT让你的RStudio如虎添翼
API的的调用目前来说不限制地区,但是OpenAI的API的申请限制了地区。运行的时候,如果出现了429,意味着你被限流了,需要等一会才行。 前提是,你需要注册一个OpenAI的账户,然后在https://openai.com/api/ 里申…...
Python 算法交易实验45 再探量化
说明 去年大部分精力都在构建底层架构和工具了,一直都没有时间搞量化。目前底层的数据库服务(ADB)和清洗(衍生 AETL) 工具已经好了,我想尽快的把量化启动起来。 内容 1 思想 作为交易来说,只有买卖。通过数据分析与模型,我们获得的增强点是决策。在合适的时候进行买卖的…...
Dubbo加载配置文件方式,加载流程,加载配置文件源码解析
配置方法 API配置 以Java编码的方式组织配置,Dubbo3配置API详解 :https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/api/#bootstrap-api public static void main(String[] args) throws IOException {ServiceConfig<Greet…...

十大开源测试工具和框架,一定有你需要的
目录 前言 Katalon Studio Selenium Appium JMeter SOAP UI Robot Framework Watir JUnit Robotium Citrus 总结 前言 免费的开源框架和工具由于其开源特性,现在逐渐成为自动化测试的首选解决方案。区别在于,你是喜欢使用类库编写一个全新的…...
加密技术在android中的应用
1、算法基础 算法基础参照linux的全盘加密与文件系统加密在android中的应用 消息摘要算法 对称加密算法 非对称加密算法...

备战蓝桥杯【一维前缀和】
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...

研报精选230214
目录 【行业230214艾瑞股份】中国增强现实(AR)行业研究报告【行业230214国信证券】信息安全深度剖析5:密评和信创双催化,密码产业开启从1到N【行业230214民生证券】磁性元器件深度报告:乘新能源之风,磁性元…...

【SSL/TLS】准备工作:证书格式
证书格式1. 格式说明1.1 文件编码格式1.2 文件后缀格式2. xca导出格式1. 格式说明 1.1 文件编码格式 1. PEM格式: 使用Base 64 ASCII进行编码的纯文本格式。后缀为“.pem”, ".cer", ".crt", ".key" 2. DER格式 二进制编码格式,文件…...

Linux常用命令---系统常用命令
Linux系统常用命令场景一: 查看当前系统内核版本相关信息场景二: sosreport 命令场景三: 如何定位并确定命令?场景四:查看当前系统运行负载怎场景五: 查看当前系统的内存可用情况场景六:查看网卡…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...