python网络爬虫实战教学——urllib的使用(2)

在这里插入图片描述

文章目录

  • 专栏导读
  • 1、前言
  • 2、URLError
  • 3、HTTPError
  • 4、urlparse
  • 5、urlunparse

专栏导读

✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。

本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《python网络爬虫实战教学》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》 ,《机器学习案例》

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

1、前言

❓我们已经了解了如何发送请求,但是在网络不好的情况下,如果出现了异常,该怎么办呢?
这时要是不处理这些异常,程序很可能会因为报错而终止运行,所以异常处理还是十分有必要的。
urllib 库中的 error 模块定义了由 request 模块产生的异常。当出现问题时,request 模块便会抛出 error 模块中定义的异常。

2、URLError

URLError 类来自urllib库的error模块,继承自0SError类,是error 异常模块的基类,由request模块产生的异常都可以通过捕获这个类来处理。它具有一个属性 reason,即返回错误的原因
下面用一个实例来看一下:

from urllib import request, error
try:response =request.urlopen('https://cuiqingcai.com/404')
except error.URLError as e:print(e.reason)

我们打开了一个不存在的页面,照理来说应该会报错,但是我们捕获了URLError 这个异常,
运行结果如下:

Not Found

程序没有直接报错,而是输出了错误原因,这样可以避免程序异常终止,同时异常得到了有效处理。

3、HTTPError

HTTPError 是URLError的子类,专门用来处理HTTP请求错误,例如认证请求失败等。它有如下3个属性。

code:返回 HTTP状态码,例如 404 表示网页不存在,500表示服务器内部错误等。
reason:同父类一样,用于返回错误的原因。
headers:返回请求头。

下面我们用几个实例来看看:

from urllib import request, error
try:response =request.urlopen('https://cuiqingcai.com/404')
except error.HTTPError as e:print(e.reason,e.code, e.headers, sep='\n')

4、urlparse

该方法可以实现URL的识别和分段,这里先用一个实例来看一下:

from urllib.parse import urlparse
result=urlparse('https://www.baidu.com/index.html;user?id=5#comment')
print(type(result))
print(result)

这里我们利用urlparse方法对—个URL进行了解析,然后输出了解析结果的类型以及结果本身。
运行结果如下:

<class 'urllib.parse.ParseResult'>
ParseResult(scheme='https', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')

可以看到,解析结果是一个ParseResult类型的对象,包含6部分,分别是scheme、netloc、path、params、query 和fragment。

再观察一下上述实例中的 URL:
https://www.baidu.com/index.html;user?id=5#comment

可以发现,urlparse 方法在解析URL时有特定的分隔符。例如://前面的内容就是 scheme,代表协议。第一个/符号前面便是netloc,即域名;后面是path,即访问路径。分号;后面是params,代表参数。问号?后面是查询条件query,一般用作GET类型的URL。井号#后面是锚点 fragment,用于直接定位页面内部的下拉位置。

接下来’看—下它的API用法:

urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)

可以看到,urlparse方法有3个参数。

urlstring:这是必填项,即待解析的 URL。
scheme:这是默认的协议(例如 http 或 https 等 )。如果待解析的 URL 没有带协议信息,就会将这个作为默认协议。
allow_fragments:是否忽略fragment。如果此项被设置为False,那么 fragment 部分就会被忽略,它会被解析为 path、params 或者 query 的一部分,而 fragment 部分为空。

5、urlunparse

有了urlparse 方法,相应就会有它的对立方法urlunparse,用于构造 URL。这个方法接收的参数是一个可选代对象,其长度必须是6,否则会抛出参数数量不足或者过多的问题。

先用一个实例看一下:

from urllib.parse import urlunparse
data =['https','www.baidu.com', 'index.html','user', 'a-6','comment']
print(urlunparse(data))

这样我们就成功实现了URL的构造

https://www.baidu.com/index.html;user?a-6#comment

这里参数 data用了列表类型。当然,也可以用其他类型,例如元组或者特定的数据结构。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

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

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

相关文章

牛客刷题 | HJ68 成绩排序, HJ69 矩阵乘法,HJ70 矩阵乘法计算量估算

HJ68 成绩排序 题目链接 思路建立字典&#xff0c;key代表名字&#xff0c;value为数字&#xff0c;最后sorted函数按规定排序。注意名单中的名字会重名&#xff0c;所以key应该是名字加上编号&#xff0c;以免同名的分数被覆盖。将编号填充为3位数&#xff0c;方便最后输出名…

第1章 数据管理

思维导图 1.1 引言 从数据中获取的价值不可能凭空产生或依赖于偶然&#xff0c;需要有目标、规划、协作、和保障&#xff0c;也需要管理和领导力。定义&#xff1a; 数据管理是为了交付、控制、保护并提升数据和信息资产的价值&#xff0c;在其整个生命周期中制定计划、制度、…

【Web】浅聊Hessian反序列化原生jdk利用与高版本限制绕过

目录 前言 原理分析 EXP Hessian2 低版本 直接Runtime命令执行 Hessian2 高版本 利用Unsafe加载恶意字节码二次调用触发初始化 利用TemplatesImpl实例化恶意类 jdk高版本打JNDI 前文&#xff1a;【Web】浅聊Hessian异常toString姿势学习&复现 前言 上篇文章介绍…

mysql笔记:23. 在Mac上安装与卸载MySQL

文章目录 下载MySQL安装包1. 打开MySQL官网&#xff0c;点击DOWNLOADS2. 点击GPL Downloads3. 点击MySQL Community Server打开下载页面4. 选择需要的文件进行下载5. ARM or x86 DMGbrewTAR卸载1. 在系统中卸载2. 在终端中卸载 MySQL对Mac电脑的适配十分强大&#xff0c;再加上…

Oracle with as用法

一、简介 with…as关键字&#xff0c;是以‘with’关键字开头的sql语句&#xff0c;在实际工作中&#xff0c;我们经常会遇到同一个查询sql会同时查询多个相同的结果集&#xff0c;即sql一模一样&#xff0c;这时候我们可以将这些相同的sql抽取出来&#xff0c;使用with…as定…

VMware迁移虚拟机后,源存储和新存储均能看到VM名称

描述&#xff1a;两台FC存储&#xff0c;各映射两个LUN。将源存储虚拟机迁移至新存储 源存储位置 DS5020-LUN1 新存储位置 V7000Test-LUN1 迁移任务均执行成功&#xff0c;无任何报错。但是有部分虚拟机迁移至新存储后&#xff0c;未释放源存储空间。在新旧存储列表都能看见…

后端使用前端页面的很好的推荐Layui

使用前提条件就是掌握初步的html&#xff0c;css&#xff0c;js脚本 后端被前端的vue等框架&#xff0c;不想学习&#xff0c;就是简单的一个页面满足后端使用 一般建议就是掌握了基础的html&#xff0c;css&#xff0c;js脚本后&#xff0c;然后就是深入学习了解jquery,再找…

手拉手整合Springboot3+RocketMQ2.3

RocketMQ 基本概念 消息模型Message Model RocketMQ 主要由 Producer、Broker、Consumer 三部分组成&#xff0c;其中 Producer 负责生产消息&#xff0c;Consumer 负责消费消息&#xff0c;Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器&#xff0c;每个 Bro…

PHP全新美化广告横幅在线制作源码

源码简介 可以做网站的引流不需要安装上传就可以使用&#xff0c;在第一版基础上做了二次开发更加好用 注意&#xff1a;主机和服务器均可架设搭建,如果使用宝塔架设点击访问的时候提示找不到文件路径的时候,记得点击网站目录把防跨站攻击先关闭,这样就可以正常访问了,这款是…

Mysql查询与统计

单表查询 例如&#xff1a;查询某个表中的某些数据 select * from 表名; select 字段1,字段2 from 表名; 多表查询&#xff1a;join on 例如&#xff1a;查询多个表中的数据&#xff0c;例如&#xff1a;表1写的是商品信息&#xff1a;商品ID&#xff0c;名字&#xff0c;表…

两台电脑简单的通信过程详解(局域网,同网段)

来源&#xff1a; https://www.bilibili.com/video/BV1BA411373b/ 一、原理 描述过程&#xff1a;分别以PC1、PC2、PC2、PC1的角度 二、eNSP测试 1.连接设备 2.查看PC1情况 3.打开抓包后&#xff0c;再ping一下PC2 4.PC1发送ARP报文 broadcast 意思为广播(IP都是f,意为255…

【数字图像处理matlab系列】保存图像

【数字图像处理系列】保存图像imwrite函数 使用函数imwrite可以将图像保存到本地上&#xff0c;该函数的语法为 imwrite(image_data, filename)其中&#xff0c;image_data是要写入的图像数据&#xff0c;可以是一个矩阵或一个三维数组&#xff08;对于彩色图像&#xff09;&…

C语言程序设计-谭浩强

文章目录 1 C语言2 算法3 顺序程序设计3.1 数据的表示形式3.2 输入和输出 4 选择程序结构5 循环程序结构6 数组7 函数模块化8 指针8.1 动态内存分配 9 结构类型9.1 链表9.2 共用体 union9.3 枚举 enum9.4 typedef 10 对文件的输入输出10.1 顺序读写10.2 随机读写 1 C语言 1.1 …

Java代码基础算法练习-求给定3个数, 进行从小到大排序-2024.03.20

任务描述&#xff1a; 输入三个整数 x,y,z(0<x<1000&#xff0c;0<y<1000&#xff0c;0<z<1000)&#xff0c;请把这三个数由小到大输出。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;public class m24…

nginx配置跨域

要在Nginx中配置跨域&#xff0c;您需要编辑Nginx的配置文件&#xff08;通常是nginx.conf&#xff09;&#xff0c;在相应的server或location块中添加CORS相关的响应头。以下是具体的配置步骤&#xff1a; 打开Nginx配置文件&#xff1a;您需要找到并打开Nginx的配置文件&…

python如何在正则表达式匹配成功的位置增加字符

如果你想在正则表达式替换时保持原匹配项不变并在其后添加新内容&#xff0c;你可以使用捕获组&#xff08;capture groups&#xff09;和后向引用&#xff08;backreference&#xff09;。在正则表达式中&#xff0c;捕获组可以通过在模式中使用圆括号来创建&#xff0c;然后可…

SQL基础知识

函数 #left() right() 左边或者右边的字符 #lower() upper() 转换成大写或小写的字符 #ltrim() rtrim() 去除左边或者右边的字符 #length() 长度&#xff0c;一字节为单位 #soundex() 转换为语音值 select * from student where soundex(coll) soundex(hello);日期和时间处理…

系统设计实例(一)百万级别用户系统

二、百万级别用户系统 原则&#xff1a; 尽可能地缓存数据采用无状态Web层支持多个数据中心在 CDN 中托管静态资源通过分片扩展数据层将层级拆分为独立的服务 负载均衡器 负载均衡器会将传入的流量均匀分配给在负载均衡集合中定义的Web服务器&#xff0c;用户直接连接负载均…

【软件测试】如何设计自动化测试脚本

企业中如何设计自动化测试脚本呢&#xff1f;今天我们就来为大家分享一些干货。 一、线性设计 线性脚本设计方式是以脚本的方式体现测试用例&#xff0c;是一种非结构化的编码方式&#xff0c;多数采用录制回放的方式&#xff0c;测试工程师通过录制回访的访问对被测系统进行…

[LCP 51. 烹饪料理] 子集型回溯

Problem: LCP 51. 烹饪料理 文章目录 思路案例分析Code 思路 子集型回溯有两种解法 输入视角 通过判断集合中的每一个元素 k&#xff0c;认为元素 k 被选入子集或不被选入子集&#xff0c;从而得到答案。其 dfs 形状是一个高度为 n 的二叉树。作为当前节点的元素 k 代表的是这…