Python自带爬虫库urllib使用大全

目录

一、urllib库简介

二、发送HTTP请求

三、处理响应

四、解析URLs

五、设置代理

六、总结


在Python中,urllib是一个用于处理URLs的内置库,它提供了用于构建、解析、发送和接收HTTP、HTTPS和其他URLs的强大工具。这个库是Python标准库的一部分,因此不需要额外安装任何依赖项。本文将介绍urllib库的常用功能和用法,包括如何使用urllib发送HTTP请求、处理响应、解析URLs等。

一、urllib库简介

urllib库包含多个模块,其中最常用的是urllib.request和urllib.parse。

urllib.request模块提供了一个高级的HTTP客户端接口,可以用于发送各种类型的HTTP请求(GET、POST、PUT、DELETE等)。
urllib.parse模块提供了用于解析URLs的工具,可以将URLs分解为各个组成部分,并可以构建新的URLs。

二、发送HTTP请求

要使用urllib发送HTTP请求,需要先导入urllib.request模块,并使用其中的Request类创建一个请求对象。然后,可以使用urlopen()函数发送请求并获取响应。

下面是一个简单的示例,演示如何使用urllib发送GET请求:

import urllib.request  
  
# 创建请求对象  
req = urllib.request.Request('http://example.com')  
  
# 发送请求并获取响应  
response = urllib.request.urlopen(req)  
  
# 打印响应内容  
print(response.read())
如果要发送POST请求,可以在创建请求对象时添加额外的参数。下面是一个示例:

python
import urllib.request  
import urllib.parse  
  
# 创建请求对象  
data = urllib.parse.urlencode({'key1': 'value1', 'key2': 'value2'})  
req = urllib.request.Request('http://example.com/post', data)  
  
# 发送请求并获取响应  
response = urllib.request.urlopen(req)  
  
# 打印响应内容  
print(response.read())

在上面的示例中,我们使用了urlencode()函数将字典转换为URL编码的字符串,并将其作为请求体发送。然后,我们指定了请求方法为POST。注意,我们还需要指定请求头中的Content-Type为application/x-www-form-urlencoded,以告知服务器我们发送的是表单数据。

三、处理响应

在发送请求后,我们可以使用Response对象来获取响应的状态码、头部信息等。下面是一个示例:

import urllib.request  
  
# 创建请求对象  
req = urllib.request.Request('http://example.com')  
  
# 发送请求并获取响应  
response = urllib.request.urlopen(req)  
  
# 获取响应状态码和头部信息  
status = response.status  # HTTP状态码(200, 404等)  
headers = response.getheaders()  # 返回一个包含所有头部信息的列表(元组对)

四、解析URLs

urllib.parse模块提供了用于解析URLs的工具,可以将URLs分解为各个组成部分,并可以构建新的URLs。下面是一个示例,演示如何使用urllib.parse模块解析URLs:

import urllib.parse  
  
# 创建一个URL字符串  
url = 'http://example.com/path/to/file?query=string#fragment'  
  
# 使用urlparse()函数解析URL  
parsed_url = urllib.parse.urlparse(url)  
  
# 打印解析后的URL组成部分  
print(parsed_url)
输出:

python
ParseResult(scheme='http', netloc='example.com', path='/path/to/file', params='', query='query=string', fragment='fragment')

在上面的示例中,我们使用了urlparse()函数来解析URL,该函数返回一个ParseResult对象,包含了URL的各个组成部分。可以使用该对象的属性来访问各个部分,例如scheme表示URL的协议,netloc表示主机名和端口号,path表示URL路径等。

除了urlparse()函数外,urllib.parse模块还提供了其他一些有用的函数,例如quote()函数用于对字符串进行URL编码,unquote()函数用于对URL编码的字符串进行解码等。下面是一个示例:

import urllib.parse  
  
# 创建一个需要进行URL编码的字符串  
str = 'Hello, world!'  
  
# 使用quote()函数进行URL编码  
encoded_str = urllib.parse.quote(str)  
print(encoded_str)  # 输出:Hello%2C+world%21

五、设置代理

如果你需要使用代理服务器来发送HTTP请求,可以使用urllib.request模块中的ProxyHandler类来设置代理。下面是一个示例:

import urllib.request  
  
# 设置代理服务器地址和端口号  
proxy_handler = urllib.request.ProxyHandler({'http': 'http://proxy.example.com:8080'})  
  
# 创建自定义的OpenerDirector,将代理处理器添加到其中  
opener = urllib.request.build_opener(proxy_handler)  
  
# 创建一个Request对象,指定目标URL  
req = urllib.request.Request('https://www.zdaye.com')  
  
# 使用自定义的OpenerDirector发送请求并获取响应  
response = opener.open(req)  
  
# 打印响应内容  
print(response.read())

在上面的示例中,我们首先创建了一个ProxyHandler对象,并指定了代理服务器的地址和端口号。然后,我们创建了一个自定义的OpenerDirector对象,将代理处理器添加到其中。最后,我们使用自定义的OpenerDirector对象来发送请求并获取响应。通过这种方式,所有的HTTP请求都会经过指定的代理服务器进行转发。

六、总结

urllib库是Python中用于处理URLs的内置库,提供了发送HTTP请求、处理响应、解析URLs等功能。通过使用urllib库,你可以轻松地构建和发送HTTP请求,获取和处理响应,以及解析和构建URLs。希望通过本文的介绍,你对urllib库的使用有了更深入的了解。如果你还有其他问题或需要更多帮助,请随时向我提问。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open CASCADE学习|创建拓朴

目录 1、创建点gp_Pnt 2、创建向量gp_Vec 3、创建边TopoDS_Edge 4、线网络TopoDS_Wire 5、面TopoDS_Face 6、体TopoDS_Shape OpenCascade中的拓朴实体如下图所示,其中Compound可以包含很多Solid;Solid由Shell包围而成;Shell由相连的Fac…

7 集中式日志和分布式跟踪

文章目录 日志聚合模式日志集中化的简单解决方案使用日志并输出分布式跟踪Spring Cloud Sleuth实现分布式跟踪 小结 前面的文章: 1、 1 一个测试驱动的Spring Boot应用程序开发 2、 2 使用React构造前端应用 3、 3 试驱动的Spring Boot应用程序开发数据层示例 4、…

设计模式-总述

设计模式简介 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。它是开发人员在软件开发过程中面临的一般问题的解决方案。这些方案是众多软件开发人员经过相当长的一段时间总结出来的。是一套被反复使用的,多数人知晓的&#xf…

在Linux中使用Apache HTTP服务器

Apache HTTP服务器,也被称为Apache,是全球使用最广泛的Web服务器软件之一。它以其稳定性、强大的功能和灵活性而闻名,尤其在Linux操作系统上表现得尤为出色。以下是关于如何在Linux中使用Apache HTTP服务器的详细指南。 1. 安装Apache 首先…

ORACLE RAC DG文件路径错乱解决办法

最近接手了一个客户的RAC-RAC dg环境的维护,登录上去之后发现dg延迟了8天,由于主库的空间非常紧张,归档日志早就删除了,所以准备使用rman基于scn点的备份恢复的方案恢复dg同步 在备份完成之后,使用新的控制文件进行数据恢复的时候报错datafile 43 not found: 检查了一下发现当…

Vue面试之虚拟DOM

Vue面试之虚拟DOM 什么是虚拟dom?虚拟dom是如何产生的?编写模板template模板编译Complie挂载Mounting 如何进行新旧Dom对比? 最近在整理一些前端面试中经常被问到的问题,分为vue相关、react相关、js相关、react相关等等专题&#…

信号浪涌保护器的原理和行业应用方案

信号浪涌保护器(Surge Protective Device,简称SPD)是一种用于限制信号线路中瞬态过电压和分泄浪涌电流的防雷装置,主要用于保护各类信号线路及设备的防雷安全。信号浪涌保护器的原理是利用气体放电管、压敏电阻、齐纳二极管等非线…

【深入理解 ByteBuf 之三 接口类拆解】1. ObjectPool 接口设计剖析

想了一下,我决定还是做更细化的拆解,也看了很多源码剖析的文章1,以及我之前也写过,一个令人难受的点就是通篇的代码解释,通篇没什么头绪,我看着没头绪,感觉写的也没什么头绪,就是在硬…

学习JavaEE的日子 day11 初识面相对象

day11 1.初识面相对象 1.1 类和对象的理解 类 * 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合 * 简单理解:类就是对现实事物的一种描述 类的组成 * 属性:指事物的特征,例如:手机事物(品牌…

用LM Studio:2分钟在本地免费部署大语言模型,替代ChatGPT

你想在本地使用类似ChatGPT 的大语言模型么?LM Studio 可以帮你2分钟实现ChatGPT的功能,而且可以切换很多不同类型的大语言模型,同时支持在Windows和MAC上的PC端部署。 LM Studio是一款面向开发者的友好工具,特别适合那些想要探索…

生物信息学中的可重复性研究

科学就其本质而言,是累积渐进的。无论你是使用基于网络的还是基于命令行的工具,在进行研究时都应保证该研究可被其他研究人员重复。这有利于你的工作的累积与进展。在生物信息学领域,这意味着如下内容。 工作流应该有据可查。这可能包括在电脑…

C语言督学营(高级阶段)

文章目录 高级阶段19.C语言语法进阶1.条件运算符、逗号运算符(1)条件运算符 / 三目运算符   ? :(2)逗号运算符   , 2.自增自减运算符3.位运算符:按位或、按位异或、按位取反(1)逻辑与、按位与、左移、右移(2)有符号数右移 vs 无符号数右移(3)按位与、按位或、按位…

第六讲_css盒子模式

css盒子模型 1. 长度单位2. 盒子模型的组成2.1 盒子模型内容2.2 盒子模型内边距2.3 盒子模型边框2.4 盒子模型外边距 1. 长度单位 px&#xff1a;像素em&#xff1a;相对于当前元素或父元素的 font-size 的倍数 <style>.parent {height: 500px;width: 500px;background…

Maintaining Performance with Less Data(待补)

文章目录 AbstractIntroductionPrevious WorkIncreasing data useReducing data useVariable data useContribution MethodsDatasetsHardwarePerformance MetricsNetwork Architecture ExperimentationBenchmarkData stepobserve Data IncrementData Cut DiscussionConclusion …

一文了解Git(所有命令)附带图片

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 其他…

使用QPushButton实现计算机

1. 按钮类&#xff1a;QPushButton 1.1 信号 void clicked(bool checked false)//被点击触发void pressed()//当按下按钮时发出此信号void released()//当松开按钮时发出此信号void toggled(bool checked)//每当可检查按钮改变其状态时&#xff0c;都会发出此信号。1.2 实现按…

网页设计工作室网站Web前端制作个人网页(html+css+javascript)网页设计网站模板采用DIV CSS布局制作,网页作品有多个页面

网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面 【网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面】 https://…

怎样的摆渡系统,能实现安全可管控的跨网数据传输?

大数据时代&#xff0c;数据在流通与传输的过程中&#xff0c;更需要注意到数据的安全防护&#xff0c;护航数据价值。“让数据主宰一切的隐忧”&#xff0c;数字战争的时代&#xff0c;各国早已认识到网络安全愈发重要&#xff0c;数据也成为各国发展的重要武器。 出于安全性和…

GB28181视频汇聚平台EasyCVR级联后,部分通道视频无法播放是什么原因?

GB28181协议智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制…

Cesium笔记 初始化 原生Cesium

1、创建vue项目 vue create my_demo 2、下载Cesium 可以从官网下载&#xff0c;也可以使用node下载 npm install cesium 3、把node_modules文件夹中下载得Cesium&#xff0c;移出到public文件夹下 4、将Cesium.js 以及样式文件widgets.css在index.html中引用 <!DOCT…