urllib库的使用

简介: 简单实用

urllib的使用

urllib包含四个基本的模块。request:这是最基本的HTTP请求模块,可以模拟请求的发送。error:异常处理模块。如果出现请求异常,那么我们可以捕获这些异常,然后进行重试,使程序不会意外终止。parse:提供一个工具模块,提供了许多url的处理方法。robotparser:来网站的robots.txt文件,然后判断哪些文件可以爬,哪些网站不可以。

发送请求

尝试爬取Python官网

import urllib.request
response=urllib.request.urlopen("https://www.python.org")
print(response.read().decode("utf-8"))

通过简单的几行代码便得到了Python官网的源代码,输出得到的响应类型

import urllib.request
response=urllib.request.urlopen("https://www.python.org")
print(response.read().decode("utf-8"))
print(type(response))

输出结果为在这里插入图片描述
这是一个HTTPResponse类型的对象。主要的属性有read,getheader,以及getheader方法。调用read方法时我们可以得到响应的网页内容,调用status属性可以获取到响应结果的状态码,调用getheaders方法可以输出响应头信息,调用getheader方法并传入server参数即可获取响应头中server的值,例如

import urllib.request
response=urllib.request.urlopen("https://www.python.org")
# print(response.read().decode("utf-8"))
print(response.getheaders())
print(response.getheader("Server"))

输出结果:
在这里插入图片描述
说明网站是用Nginx来搭建的。

给链接传递一些参数

data参数:添加参数时要将bytes方法将参数转化为字节流编码格式的内容,即是bytes类型。何为bytes类型?我们要知道Python的字符串类型是utf-8显示类型的序列,而bytes数据类型则是utf-8格式的二进制的不可变序列。进行一些测试:

import urllib.request
import urllib.parse
data=bytes(urllib.parse.urlencode({"name":"germy"}),encoding="utf-8")
response=urllib.request.urlopen("https://www.httpbin.org/post",data=data)
print(response.read().decode("utf-8"))

输出结果:
在这里插入图片描述
form中有我们传入的参数,意味着我们模拟表单提交。
timeout参数:用于设置超时时间,单位为秒,如果超出了我们设置的这个时间,没有得到响应就会抛出异常,如果不指定参数就会使用全局默认时间,这个参数支持HTTP、HTTPS、FTP请求。

data=bytes(urllib.parse.urlencode({"name":"germy"}),encoding="utf-8")
# response=urllib.request.urlopen("https://www.httpbin.org/post",data=data)
response=urllib.request.urlopen("https://www.httpbin.org/post",timeout=0.1)
print(response.read().decode("utf-8"))

输出会报错,原因是超时,

相关文章
|
Linux 网络安全 开发工具
如何在 Linux CentOS 8 中搭建 GitLab 私有仓库并结合 Cpolar 内网穿透工具实现公网访问私有仓库【无公网IP内网穿透】
如何在 Linux CentOS 8 中搭建 GitLab 私有仓库并结合 Cpolar 内网穿透工具实现公网访问私有仓库【无公网IP内网穿透】
|
消息中间件 缓存 Shell
跟我一起来学OpenStack部署
跟我一起来学OpenStack部署
600 0
|
11月前
|
开发工具 Android开发 git
鸿蒙Flutter实战:01-搭建开发环境
本文介绍了如何搭建鸿蒙 Flutter 开发环境,包括安装 DevEco Studio 等工具,并详细说明了 Mac 和 Windows 系统下的环境变量配置。此外,还介绍了如何使用 FVM 管理多个 Flutter 版本,并提供了一些常见问题的解决方案和交流群信息。
373 0
鸿蒙Flutter实战:01-搭建开发环境
|
弹性计算 分布式计算 网络协议
聊聊复杂网络环境下hdfs的BlockMissingException异常|参数dfs.client.use.datanode.hostname
企业真实的网络环境是复杂多变的,在复杂的网络环境中部署并使用 hadoop 时,如果服务端的配置或客户端的使用不当,就可能会遇见各种问题。
聊聊复杂网络环境下hdfs的BlockMissingException异常|参数dfs.client.use.datanode.hostname
|
XML 移动开发 小程序
微信公众号开发(七)微信h5跳转小程序及小游戏示例
最近公司做活动,需要从h5页面跳转至微信小游戏。 当时接到这个需求的时候,就在想,这玩意能相互跳转么? 后来百度了一下,还真行。
513 1
|
Cloud Native 网络安全 Docker
云原生之部署ssh连接工具webssh2
云原生之部署ssh连接工具webssh2
560 0
|
JavaScript
Cadence原理图批量更新元件属性的方法和步骤
在原理图设计的过程中,有时候需要修改元器件的属性,比如电阻值、厂商、封装等属性信息。一般可以直接双击需要修改的元器件,在弹出的属性编辑(Property Editor)窗口进行对应属性的编辑。在厂商(Manufacturer)属性右击,在弹出的菜单中选择“Edit”,弹出编辑属性值(Edit Property Values)窗口,输入GJ,再点击OK即可。然后保存,关闭属性编辑窗口,再双击元器件,就可以看到这个元器件的厂商值是修改之后的值。
1159 0
|
数据安全/隐私保护 Android开发 iOS开发
阿里企业邮箱收费标准一年多少钱?
企业邮箱收费标准一年多少钱?2023阿里云企业邮箱收费标准,免费版企业邮箱0元,标准版企业邮箱优惠价540元一年(原价600元一年),企业邮箱尊享版1400元一年,9折优惠价后1260元一年,企业邮箱集团版9500元一年,9折优惠价格为7600元一年。阿里云百科分享阿里云企业邮箱不同版本收费价格表以及不同版本之间的区别、功能差异以及选择方法
543 0
|
Oracle 关系型数据库 Linux
5分钟学会在Linux上安装Oracle和一条命令创建数据库
在Linux上安装Oracle软件的过程相当复杂,让很多初学者望而却步。但在Oracle 18c以后Oracle推出了使用rpm包安装Oracle数据库软件的安装方式
466 0
|
物联网
Arduino中使用PubSubClient对接阿里云物联网平台
Arduino中使用PubSubClient对接阿里云物联网平台
1768 0