📅  最后修改于: 2020-04-10 01:01:45             🧑  作者: Mango
Urllib模块是Python的URL处理模块。它用于获取URL(统一资源定位符)。它使用urlopen函数,并能够使用各种不同的协议来获取URL。
Urllib是一个软件包,它收集了几个用于处理URL的模块,例如:
如果您的环境中不存在urllib,请执行以下代码进行安装。
pip3 install urllib
其中pip3代表Python3,让我们详细了解这些。
urllib.request
该模块有助于定义函数和类以打开URL(主要是HTTP)。打开此类URL的最简单方法之一是:
urllib.request.urlopen(url)
我们可以在示例中看到:
import urllib.request
geeksforgeeks
print(request_url.read())
输出
The source code of the URL i.e. geeksforgeeks.
urllib.parse
该模块有助于定义函数来操纵URL及其组成部分,以构建或破坏它们。通常,它着重于将URL分成小部分;或将不同的URL组件合并为URL字符串。
我们可以从下面的代码中看到这一点:
from urllib.parse import * parse_url = urlparse('https://www.geeksforgeeks.org / Python-langtons-ant/')
print(parse_url)
print("\n")
unparse_url = urlunparse(parse_url)
print(unparse_url)
输出
ParseResult(scheme ='https',netloc ='www.geeksforgeeks.org',path ='/ Python-langtons-ant /',params =“,query ='',fragment ="))
https://www.geeksforgeeks.org/Python-langtons-ant/
注意:URL的不同组成部分被分开并再次结合在一起。尝试使用其他网址以更好地理解。
urllib.parse的其他不同函数是:
函数 | 描述 |
---|---|
urllib.parse.urlparse | 分隔URL的不同组成部分 |
urllib.parse.urlunparse | 连接URL的不同组成部分 |
urllib.parse.urlsplit | 它与urlparse()类似,但不拆分参数 |
urllib.parse.urlunsplit | 合并urlsplit()返回的元组元素以形成URL |
urllib.parse.urldeflag | 如果URL包含片段,则它将返回一个URL,以删除该片段。 |
urllib.error
此模块定义urllib.request引发的异常类。每当获取URL时发生错误时,此模块都会帮助引发异常。以下是引发的异常:
我们可以在以下示例中看到这一点:
# URL错误
import urllib.request
import urllib.parse
# 尝试读取URL但没有互联网连接
try:
x = urllib.request.urlopen('https://www.google.com')
print(x.read())
# 捕获生成的异常
except Exception as e :
print(str(e))
输出
URL Error: urlopen error [Errno 11001] getaddrinfo failed
# HTTP错误
import urllib.request
import urllib.parse
# 试图读取URL
try:
x = urllib.request.urlopen('https://www.google.com / search?q = test')
print(x.read())
# 捕获生成的异常
except Exception as e :
print(str(e))
输出
HTTP Error 403: Forbidden
urllib.robotparser
该模块包含单个类RobotFileParser。此类回答有关特定用户是否可以获取发布robot.txt文件的URL的问题。Robots.txt是网站管理员创建的文本文件,用于指示网络机器人或者爬虫如何在其网站上抓取网页。robot.txt文件告诉网络抓取器不应该访问服务器的哪些部分。
例如 :
# 导入机器人解析器类
import urllib.robotparser as rb
bot = rb.RobotFileParser()
# 检查网站的robot.txt文件所在的位置
x = bot.set_url('https://www.geeksforgeeks.org / robot.txt')
print(x)
# 读取文件
y = bot.read()
print(y)
# 我们可以检索主站点
z = bot.can_fetch('*', 'https://www.geeksforgeeks.org/')
print(z)
# 但无法抓取不允许的网址 w = bot.can_fetch('*', 'https://www.geeksforgeeks.org / wp-admin/')
print(w)
输出:
None
None
True
False