Python自带爬虫库urllib使用大全

news2024/11/18 17:19:24

目录

一、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库的使用有了更深入的了解。如果你还有其他问题或需要更多帮助,请随时向我提问。

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

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

相关文章

第8章 BOM

学习目标 了解BOM的概念,能够说出BOM的作用 掌握BOM对象的使用,能够通过BOM对象实现浏览器操作 掌握窗口事件的使用,能够在窗口加载、卸载或改变大小时执行特定的代码 掌握定时器方法的使用,能够通过定时器延迟一段时间执行代码或间歇执行代码 熟悉同步和异步的概念,能够说…

2024年湖北建设厅特种工电工、焊工如何报名考试呢?

特种作业:是指容易发生事故,对操作者本人、他人的安全健康及设备、设施的安全可能造成重大危害的作业。特种作业的范围由特种作业目录规定。本规定所称特种作业人员,是指直接从事特种作业的从业人员。特种作业人员所持证件为特种作业操作证。…

小红书获得小红书笔记详情 API (smallredbook.item_get_video)在电商中的发展

小红书笔记详情API(smallredbook.item_get_video)在电商中具有广阔的发展前景,具体来说: 优化商品展示:通过API获取的商品视频详情,可以丰富商品展示形式,提供更加全面、生动的商品信息&#xf…

快递批量查询助手:智能删除空格,让查询更精准

在快递单号中,空格可能会造成查询失败或延误。现在,有了我们的快递批量查询助手,您不再需要担心空格问题! 首先,我们要进入快递批量查询高手主页面,并在上方的功能栏里点击“添加单号”功能。 第二步&…

Unity组件开发--UI管理器

1.Canvas组件: 注意属性: (1)渲染模式是:屏幕空间相机 (2)创建一个UICamera节点,管理相机 (3)屏幕画布缩放模式 (4)画布下挂载两…

常见Mysql数据库操作语句

-- DDL创建数据库结构 -- 查询所有数据库 show databases ; -- 修改数据库字符集 alter database db02 charset utf8mb4; -- 创建字符编码为utf——8的数据库 create database db05 DEFAULT CHARACTER SET utf8;-- 创建表格 create table tb_user(id int auto_increment primar…

Kubernetes 核心实战之三(精华篇 3/3)

文章目录 6、Ingress ★6.1 安装 Ingress6.2 访问6.3 安装不成功的bug解决6.4 测试使用6.4.1 搭建测试环境6.4.2 配置 Ingress的规则6.4.3 测试I6.4.4 测试II6.4.5 路径重写6.4.6 限流 7. Kubernetes 存储抽象7.1 NFS 搭建7.2 原生方式 数据挂载7.3 PV 和 PVC ★7.3.1 创建 PV …

2023年度总结:但行前路,不负韶华

​ 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS &#x…

【三】把Python Tk GUI打包exe可执行程序,移植到其他机器可用

背景 这是一个系列文章。上一篇【【二】为Python Tk GUI窗口添加一些组件和绑定一些组件事件-CSDN博客】 使用python脚本写一个小工具。因为命令行运行的使用会有dos窗口,交互也不是很方便,开发环境运行也不方便分享给别人用,所以想到…

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

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

java递归生成树型结构

java递归生成树 1.获取数据 public List<TreeClassifyRespVO> getTreeClassifyList(ClassifyPageReqVO reqVO) {List<ClassifyDO> classifyList classifyMapper.selectList(reqVO);List<TreeClassifyRespVO> childClassifyResp ClassifyConvert.INSTANCE…

2019年认证杯SPSSPRO杯数学建模B题(第一阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于方差分布的方法对未知语言文本中重复片段的自动搜索问题的研究 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但…

哈希表-散列表数据结构

1、什么是哈希表&#xff1f; 哈希表也叫散列表&#xff0c;哈希表是根据关键码值(key value)来直接访问的一种数据结构&#xff0c;也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度&#xff0c;这种映射关系称之为哈希函数或者散列函数&…

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 &#xff08;1&#xff09;主机 …

HarmonyOS4.0系统性深入开发15Want概述

Want概述 Want的定义与用途 Want是对象间信息传递的载体&#xff0c;可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数&#xff0c;包含了指定的启动目标以及启动时需携带的相关数据&#xff0c;如bundleName和abilityName字段分别指明目标Ability所…

Vue-10、Vue键盘事件

1、vue中常见的按键别名 回车 ---------enter <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>键盘事件</title><!--引入vue--><script type"text/javascript" src"h…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作&#xff0c;推出基于 AI 的角色引擎和 Copilot 助理&#xff0c;旨在提升游戏中 NPC 的交互力和生命力&#xff0c;提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC&#xff0c;通过生成式 AI 驱动 NPC 行为&#xff0c;使其动态响应玩家操作…

问题记录:关于vivado报错解决

start_gui open_project E:/githome/xxxx.xpr ERROR: [Project 1-510] Parsing generated run data failed 在某些时候打开工程出现如下错误&#xff0c;运行源文件损坏。 解决办法&#xff1a; 重新打开工程。

scrollTop与offsetTop解决小分辨率区域块向上滚动效果效果,结合animation与@keyframes实现标题左右闪动更换颜色效果。

scrollTop 是一个属性&#xff0c;它表示元素的滚动内容垂直滚动条的位置。对于可滚动元素&#xff0c;scrollTop 属性返回垂直滚动条滚动的像素数&#xff0c;即元素顶部被隐藏的像素数。 offsetTop 是一个属性&#xff0c;用于获取一个元素相对于其父元素的垂直偏移量&…

揭秘智慧礼品背后的故事:AI怎么挑选礼物?

如若不是从事技术行业&#xff0c;在罗列礼品清单时&#xff0c;可能不会想到 “数据”&#xff0c;但幸运的是&#xff0c;我们想到了。如何将AI技术应用到当季一些最受青睐的产品中去&#xff0c;训练数据是这一智能技术的背后动力。很多电子设备或名称中带有“智能”一词的设…