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 命令场景三: 如何定位并确定命令?场景四:查看当前系统运行负载怎场景五: 查看当前系统的内存可用情况场景六:查看网卡…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...