Python基础教程(二十七):urllib模块

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

文章目录

    • 引言
    • 一、urllib.request:发送网络请求
      • 1.1 基本使用
      • 1.2 发送GET请求
      • 1.3 发送POST请求
    • 二、urllib.parse:解析和构建URLs
      • 2.1 解析URL
      • 2.2 构建URL
    • 三、urllib.error:处理网络错误
      • 3.1 捕获HTTP错误
      • 3.2 捕获其他网络错误
    • 四、案例展示:网络爬虫
    • 结束语
    • 总结

引言

在Python中,urllib模块是一组用于处理URLs的标准库,它提供了发送网络请求、解析URLs、处理重定向和错误等功能。对于进行Web爬虫开发、数据抓取和API调用等任务,urllib模块是非常实用的工具。本文将深入探讨urllib模块的各个组成部分,包括urllib.request, urllib.parseurllib.error,并通过具体案例帮助你掌握如何使用这些模块进行网络请求和数据处理。

一、urllib.request:发送网络请求

urllib.request模块提供了多种方法来发送网络请求,最常用的是urlopen()函数,它可以打开一个URL并返回一个类似文件的对象,从中可以读取响应数据。

1.1 基本使用

from urllib.request import urlopen# 打开URL
response = urlopen('https://www.example.com')# 读取响应数据
data = response.read()
print(data.decode('utf-8'))  # 解码响应数据

1.2 发送GET请求

from urllib.request import Request, urlopenurl = 'https://api.example.com/data'
req = Request(url)
response = urlopen(req)
data = response.read().decode('utf-8')
print(data)

1.3 发送POST请求

from urllib.request import Request, urlopen
from urllib.parse import urlencodeurl = 'https://api.example.com/login'
data = {'username': 'user', 'password': 'pass'}
data = urlencode(data).encode('ascii')  # 对数据进行编码
req = Request(url, data=data)
response = urlopen(req)
print(response.read().decode('utf-8'))

二、urllib.parse:解析和构建URLs

urllib.parse模块提供了用于解析和构建URLs的函数,这对于处理动态生成的URLs非常有用。

2.1 解析URL

from urllib.parse import urlparseurl = 'https://www.example.com/path?query=1#fragment'
parsed_url = urlparse(url)
print(parsed_url)  # 输出:ParseResult(scheme='https', netloc='www.example.com', path='/path', params='', query='query=1', fragment='fragment')

2.2 构建URL

from urllib.parse import urlunparseparts = ('https', 'www.example.com', '/path', '', 'query=1', 'fragment')
url = urlunparse(parts)
print(url)  # 输出:https://www.example.com/path?query=1#fragment

三、urllib.error:处理网络错误

urllib.error模块包含了处理网络请求过程中可能出现的各种错误的异常类,如HTTPError和URLError。

3.1 捕获HTTP错误

from urllib.request import urlopen
from urllib.error import HTTPErrortry:response = urlopen('https://www.example.com/nonexistent')
except HTTPError as e:print(e.code)  # 输出:404

3.2 捕获其他网络错误

from urllib.request import urlopen
from urllib.error import URLErrortry:response = urlopen('https://www.example.com', timeout=1)
except URLError as e:print(e.reason)  # 输出:[Errno 110] Connection timed out

四、案例展示:网络爬虫

假设我们要从一个网站上抓取所有的图片链接,可以使用urllib模块来实现。

from urllib.request import urlopen
from bs4 import BeautifulSoupurl = 'https://www.example.com'
response = urlopen(url)
soup = BeautifulSoup(response, 'html.parser')
images = soup.find_all('img')
for img in images:print(img.get('src'))

结束语

喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【Python系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

总结

通过本文的学习,你应该对Python的urllib模块有了全面的了解,包括如何发送网络请求、解析和构建URLs,以及处理网络错误。urllib模块是进行Web开发和数据抓取不可或缺的工具,掌握其使用方法将极大地提高你的网络编程能力。在实际项目中,结合HTML解析库如BeautifulSoup,你可以构建出功能强大的网络爬虫和数据抓取工具。不断练习和探索,你将能够更深入地理解网络请求的机制,提升你的网络编程技能。

python相关文章索引文章链接
Python基础语法(一):标识符与保留字部分Python基础语法(一):标识符与保留字部分
Python基础语法(二):数据类型Python基础语法(二):数据类型
Python基础语法(三):运算符Python基础语法(三):运算符
Python基础语法(四):条件控制Python基础语法(四):条件控制
Python基础语法(五):循环语句Python基础语法(五):循环语句
Python基础语法(六):推导式编程Python基础语法(六):推导式编程
Python基础教程(七):函数编程-从基础到进阶Python基础教程(七):函数编程-从基础到进阶
Python基础教程(八):迭代器与生成器编程Python基础教程(八):迭代器与生成器编程
Python基础教程(九):Lambda 函数Python基础教程(九):Lambda 函数
Python基础教程(十):装饰器Python基础教程(十):装饰器
Python基础教程(十一):数据结构汇总梳理Python基础教程(十一):数据结构汇总梳理
Python基础教程(十二):模块Python基础教程(十二):模块
Python基础教程(十三):file文件及相关的函数Python基础教程(十三):file文件及相关的函数
Python基础教程(十四):OS 文件/目录方法Python基础教程(十四):OS 文件/目录方法
Python基础教程(十五):面向对象编程Python基础教程(十五):面向对象编程
Python基础教程(十六):正则表达式Python基础教程(十六):正则表达式
Python基础教程(十七):CGI编程Python基础教程(十七):CGI编程
Python基础教程(十八):MySQL - mysql-connector 驱动Python基础教程(十八):MySQL - mysql-connector 驱动
Python基础教程(十九):网络编程Python基础教程(十九):网络编程
Python基础教程(二十):SMTP发送邮件Python基础教程(二十):SMTP发送邮件
Python基础教程(二十一):多线程Python基础教程(二十一):多线程
Python基础教程(二十二):XML解析Python基础教程(二十二):XML解析
Python基础教程(二十三):JSON数据解析Python基础教程(二十三):JSON数据解析
Python基础教程(二十四):日期和时间Python基础教程(二十四):日期和时间
Python基础教程(二十五):内置函数整理Python基础教程(二十五):内置函数整理
Python基础教程(二十六):对接MongoDBPython基础教程(二十六):对接MongoDB

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期

腾讯云相关文档相关参考-有的点不准确 前言 最近https到期了,想着手动更新一下https证书,结果发现证书现在的有效期只有90天,于是想找到一个自动更新证书的工具,发现了acme.sh,但是网上的文章质量参差不齐&#xff0…

数据结构——二分算法

二分查找 1. 在排序数组中查找元素的第一个和最后一个位置 代码实现&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/int binarySearch(int *nums, int numsSize, int target) {int l 0, r numsSize - 1; while (l <…

【面试题】前端 移动端自适应?_前端移动端适配面试题

设备像素比 设备像素比 (DevicePixelRatio) 指的是设备物理像素和逻辑像素的比例 。比如 iPhone6 的 DPR 是2。 设备像素比 物理像素 / 逻辑像素。可通过 window.devicePixelRatio 获取&#xff0c;CSS 媒体查询代码如下 media (-webkit-min-device-pixel-ratio: 3), (min-…

6.折半查找

折半查找 基本思路在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;若给定值小于中间元素的要查找的数,则在中间元素的左半区继续查找;若给定值大于中间元素的要查找的数,则在中间元素的右半区继续查找。不断重复上述查找过 程,直到查找成功…

揭秘循环购:消费即收益,如何助力商家月销百万?

大家好&#xff0c;我是吴军&#xff0c;今天要和大家分享一种颠覆性的商业模式——循环购。你是否听说过“消费1000送2000”这样的促销活动&#xff1f;是不是觉得太不可思议&#xff0c;商家岂不是在“送钱”&#xff1f;别急&#xff0c;让我为你揭开这背后的秘密。 循环购&…

C和C++实现stack的对比

本篇文章&#xff0c;我们将对比C语言和C实现栈的不同来体会C的魅力&#xff01; 1.栈的介绍 栈&#xff08;Stack&#xff09;是一种常见的数据结构&#xff0c;它是一种特殊的线性表&#xff0c;只允许在一端进行数据的插入和删除操作。这一端通常被称为栈顶&#xff08;Top…

路由器ARP和ARP-proxy(华为)

#交换设备 路由器ARP和ARP-proxy(华为) 当一个广播域中的主机想要访问另外一个广播域的主机时&#xff0c;会广播ARP报文&#xff0c;询问目标IP地址所对应的MAC地址&#xff0c;默认情况下&#xff0c;arp记录是设备自动生成的&#xff0c;但是这样会容易受到ARP欺骗攻击&am…

python实训day4

1、查看数据库的版本 2、查看当前用户 3、查看当前数据库 4、计算表达式的结果; 任何一个数据库,无论大小,都首先是一个超级计算器 5、查看当前MySQL环境中所有的数据库; 系统数据库(只能看)和自定义数据库(任何操作) 6、先建数据库 gaoming 7、如果表已经存在,则创建不能成功 …

【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4

【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 部署了服务端。需要对其测试【ai】tx2-nx 查看 jetpack 版本信息及对应的tritonserver【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子C++ Triton YoloV4 client 是基于 r21.05的 服务端的tensort 的…

springboot3 连接 oceanbase + logproxy数据同步到redis

我这用的是 社区版的 单机&#xff0c; rocky liunx 安装oceanbase 注意事项&#xff1a; logproxy 是 CDC 模式 &#xff0c; springboot 可以直接订阅 canal 是 binlog模式&#xff0c; canal 订阅 logproxy&#xff0c; springboot 订阅 canal logproxy 也可以转 bi…

嵌入式实验---实验七 SPI通信实验

一、实验目的 1、掌握STM32F103SPI通信程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6通过74HC595控制一位LID数码管&#xff0c;实现以下两个要求&#xff1a; &#xff08;1&#xff09;数码管从0到9循环显示&#xff1b; …

无人机巡检小羊仿真

详细视频地址 仿真效果 可视化三维仿真 gazebo物理仿真 px4 飞控仿真 仿qgc简易地面站 详细视频地址

计算机组成原理 | CPU子系统(1)基本概述

基本结构模型 运算与缓存部件 数据寄存部件 PSW不是很清楚 存储器是什么&#xff1f;属于那个结构里&#xff1f; 时序处理部件 cpu是大脑&#xff0c;控制器是神经元 ①通过硬件产生控制信号 ②通过软件产生控制信号 外频&#xff08;系统时钟信号&#xff09;&#xff0c;…

我是如何在markdown编辑器中完成视频的插入和播放的

如果你有更好用的编辑器组件&#xff0c;请一定推荐给我!!!&#xff08;最好附带使用说明&#x1f913;️&#xff09; 介绍 在开发一个社区页面的时候&#xff0c;需要完成发帖、浏览帖子的能力。这里考虑接入markdown编辑器进行开发&#xff0c;也符合大多数用户的习惯。 …

板凳--------第20章-信号:基本概念1

tlpi_hdr.h头文件使用及设置 liao__ran 于 2020-09-29 15:12:01 发布 阅读量1.6k 收藏 5 点赞数 1 分类专栏&#xff1a; linux系统编程手册 版权 linux系统编程手册 专栏收录该内容 7 篇文章 1 订阅 订阅专栏 使用的头文件&#xff0c;主要如下&#xff1a; ename.c.inc erro…

7.XSS获取键盘记录(存储型xss)

什么是跨域 http:// www . xyz.com : 8080 / script/test.js 协议 子域名 主域名 端口 资源地址 当协议、主机&#xff08;主域名&#xff0c;子域名&#xff09;、端口中的任意一个不相同时&#xff0c;称为不同域 我们把不同的域之间请求数据的操作&#xff0c;成为跨域操作…

MOC和MCS通讯流程分析

半导体行业-SECS/GEM协议 半导体设备通讯SECS协议是由国际半导体设备与材料协会&#xff08;SEMI&#xff09;的会员一起构建的连接性标准。它最初是为了在半导体/电子行业的自动化中实现设备与主机系统之间的通信而制定的。 SECS/GEM不仅允许客户查看设备的功能&#xff0c;…

GandCrab5.2勒索病毒复现

GandCrab第一代勒索病毒首次出现于2018年1月&#xff0c;后面经历了五个大版本的更新迭代&#xff0c;该系列病毒特征是采用RSAAES加密算法&#xff0c;从算法上分析解密难度较大&#xff0c;会将系统中的大部分文件加密为随机后缀名的文件&#xff0c;然后对用户进行勒索。本实…

8.12 矢量图层面要素单一符号使用六(SVG填充)

文章目录 前言SVG填充&#xff08;SVG fill&#xff09;QGis设置面符号为SVG填充&#xff08;SVG fill&#xff09;SVG填充&#xff08;SVG fill&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中使用SVG填充&#xff08;SVG fill&#xff09;的使用说明&#xff1a;文…

ARM相关理论知识

一、计算机的组成 1.输入设备&#xff1a;将数据与程序转换成计算机能够识别&#xff0c;存储&#xff0c;运算的形式&#xff0c;输送到计算机中。 2.输出设备&#xff1a;将计算机对程序和数据的运算结果输送到计算机外部设备 3.控制器&#xff1a;由程序技术器&#xff0…