首页 > 编程语言 >Python网络编程:掌握urllib包的妙用

Python网络编程:掌握urllib包的妙用

时间:2023-12-24 10:02:58浏览次数:42  
标签:妙用 请求 Python request URL urllib url print

在Python的世界里,处理网络请求是日常任务之一。不论是爬取网页数据,还是调用网络API,一个好用的HTTP客户端库是必不可少的。Python标准库中的urllib包就是这样一个强大的工具,它提供了一个简单的界面来与网上资源互动。本文将带你深入了解urllib包,包括它的主要模块,以及如何使用它们完成网络请求、处理数据和异常。

urllib包概述

urllib是Python标准库中的HTTP客户端包,包含几个用于处理URLs的模块,主要包括:

  • urllib.request:用于打开和读取URLs。
  • urllib.error:包含urllib.request抛出的异常。
  • urllib.parse:用于解析URLs。
  • urllib.robotparser:用于解析robots.txt文件。

使用urllib.request发起请求

urllib.request模块提供了最基本的HTTP请求方法。以下是一些基本的使用方式:

基本GET请求

import urllib.request

url = 'http://httpbin.org/get'

# 发起请求并读取响应
with urllib.request.urlopen(url) as response:
   html = response.read()
   print(html)

在上面的例子中,我们对"httpbin.org/get"发起了一个GET请求,并打印了响应内容。urlopen方法可以直接打开和读取URLs。

发送数据和使用POST请求

import urllib.parse
import urllib.request

url = 'http://httpbin.org/post'
values = {'key': 'value', 'abc': 'xyz'}

# 编码请求数据
data = urllib.parse.urlencode(values).encode('utf-8')

# 发起POST请求
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as response:
   result = response.read()
   print(result)

当我们需要发送数据(例如,填写表单)时,通常使用POST请求。在上面的代码中,我们首先将数据编码成适合URL的格式,然后创建一个请求对象,并最终发送请求。

处理异常

网络请求有时会失败,因此错误处理是必不可少的。urllib.error模块提供了URLErrorHTTPError,用于处理各种异常情况。

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

url = 'http://httpbin.org/status/404'

req = Request(url)
try:
    response = urlopen(req)
except HTTPError as e:
    print('The server couldn\'t fulfill the request.')
    print('Error code: ', e.code)
except URLError as e:
    print('We failed to reach a server.')
    print('Reason: ', e.reason)
else:
    # everything is fine
    print('Requested page successfully retrieved')

在这个示例中,我们尝试请求一个返回404状态码的URL。当服务器无法满足请求时,会抛出HTTPError;若无法到达服务器,则会抛出URLError

解析URL

在网络编程中,有时需要从URL中提取不同部分的信息。urllib.parse模块提供了解析URL的功能。

from urllib.parse import urlparse

parsed_url = urlparse('http://user:pwd@NetLoc:80/path;param?query=arg#frag')
print('scheme  :', parsed_url.scheme)
print('netloc  :', parsed_url.netloc)
print('path    :', parsed_url.path)
print('params  :', parsed_url.params)
print('query   :', parsed_url.query)
print('fragment:', parsed_url.fragment)

在以上代码中,我们使用了urlparse方法来分解URL。这使我们能够访问URL的不同组件,如方案、网络位置、路径、参数、查询和片段。

处理robots.txt

网络爬虫在访问网站时应考虑robots.txt规则。urllib.robotparser模块可以帮助解析这些规则。

from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url('http://www.example.com/robots.txt')
rp.read()
user_agent = 'BadCrawler'
url = 'http://www.example.com/'
print(rp.can_fetch(user_agent, url))  # False if not allowed, True if allowed

通过上述代码,我们创建了一个RobotFileParser对象,读取并解析了网站的robots.txt文件。然后我们可以使用can_fetch方法来检查特定的用户代理是否被允许抓取一个URL。

结论

urllib是一个非常有用的模块,可以用来执行多种网络请求,解析URLs,并且处理网络异常。尽管对于复杂的请求,你可能会需要更高级的库(如requests),但对于基本的HTTP通讯需求,Python的urllib已经绰绰有余。

了解urllib的工作原理不仅可以帮助你处理日常的网络任务,还能让你更好的理解HTTP协议和网络通信。随着技能的提升,你将能够运用urllib来构建更复杂的网络交互、数据采集系统或是自动化测试工具。

标签:妙用,请求,Python,request,URL,urllib,url,print
From: https://blog.51cto.com/u_15288375/8953756

相关文章

  • Python 潮流周刊第 32 期(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2023-12-23-weekly以下是本期摘要:......
  • Python函数的使用和示例
    在Python中,函数是一种组织和复用代码的重要方式。函数可以帮助你将代码分解成小的、可管理的部分,并且可以在不同的地方重复使用这些代码。这里是一个简单的Python函数的示例:函数定义与使用定义一个函数:函数以def关键字开始,后跟函数名和圆括号()。圆括号内可以包含参数,也可以为空。......
  • python网站创建013:jQuery的下载安装
    jQuery:相当于别人做的一个库,模块,里面包含了DOM和BOM所需要的功能,既然有了DOM和BOM那为什么还会有jQuery呢?DOM和BOM是属于比较底层的代码,可以用,但是比较繁琐,所以出现了jQuery,代码更为简洁,之后也建议使用jQuery。jQuery下载:https://jquery.com/ ......
  • Python MongoDB 聚合管道操作符及使用
    ​ 1、$match筛选文档,类似于SQL的WHERE子句。可以使用$match来选择满足特定条件的文档。使用示例:PythonMongoDB聚合管道操作符及使用-CJavaPy2、$group分组和汇总数据,类似于SQL的GROUPBY子句。你可以使用$group来对文档进行分组,并进行聚合操作,如计算总和、......
  • Python JSON格式字符串与对象之间的转换多种方法
    ​ 1、json.dumps()和json.loads()方法使用 json.dumps() 方法将Python对象转换为JSON格式字符串。使用 json.loads() 方法将JSON格式字符串解析为Python对象。使用示例:PythonJSON格式字符串与对象之间的转换多种方法-CJavaPy2、json.dump()和json.load(......
  • python中能被注意到的异常
    异常分为编译性异常与运行性异常python中的try只能看见运行性异常第一种情况:pycharm看到异常,是编译时异常第二种情况:pycharm看到异常,但是是运行时异常第三种情况:pycharm看不到异常,是运行时异常......
  • Python各个列表交叉进行排列组合
    例v_list=[["1.mp4","2.mp4"],["3.mp4"],["6.mp4","7.mp4"],[],[]]我想把这个列表里面的各个列表,重新排列组合但是我不知道列表里套了几个列表,套的列表里有几个元素,这样就无法具体固定for循环后来使用exec()函数,间接解决了该问题不考虑顺序的问题,一共有212=4种排列方式下......
  • Python下载与安装教程(很详细)
    前言一、打开python官网点击下载打开官网,进入页面后点击导航中的Downloads进入下载页面二、选择要下载的python版本最新版本的python不能在Windows7的电脑上使用,如果你的系统是win10及以上可以直接下载3.10.x的版本,如果你系统是win7请往下拉在Lookingfor…里找到python3.8......
  • Python数据科学手册笔记:IPython
    目录Ipython帮助文档用符号?来查来文档用??来获取源代码补全方法利用tab利用*加?来补全Ipython快捷键Ipython魔法命令粘贴代码块执行外部代码计算代码运行时间内存分析魔法函数帮助错误和调试控制异常:%xmode调试模型:%debug输入输出历史禁止输出历史输入Ipython和shell命令Ipyth......
  • cmd 运行 python 常用快捷键
    在Windows命令行下运行Python文件,你可以按照以下步骤操作¹:打开Windows下的terminal。快捷键是Win+R,然后在框中输入cmd并回车¹。使用cd命令和dir命令找到要编辑运行的Python文件。如果还未创建,可以使用typenul>*.py创建Python文件(*代指文件名)¹。编辑P......