📅  最后修改于: 2023-12-03 15:34:05.659000             🧑  作者: Mango
Python的Urllib模块是一个处理URL(Uniform Resource Locators,统一资源定位符)的库,它包含了对HTTP、HTTPS、FTP等协议的处理。
Python 3中有四个模块:urllib.request、urllib.parse、urllib.error和urllib.robotparser。
Urllib.request模块定义了一些函数和各种类,用于在Python中打开URL。这里介绍几个常用的类:
urllib.request.urlopen()可以打开URL并读取其内容。它与HTTPResponse对象一起返回页面内容。下面是一段使用urlopen()向URL发送请求的简短示例代码:
import urllib.request
with urllib.request.urlopen('https://www.baidu.com') as response:
html = response.read()
print(html)
urllib.request.urlretrieve()用于下载文件。该函数解析url中的文件名称并将其保存到指定的本地路径。例如,在下面的示例中,我们将下载股票数据,并将其保存到sys.stdout中:
import urllib.request
import sys
url = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=IBM&apikey=demo&datatype=csv'
urllib.request.urlretrieve(url, sys.stdout)
urllib.parse模块解析URL,并提取其各个部分。使用该模块,我们可以轻松地从URL中提取出所需的信息。
urllib.parse.urlparse()函数从URL字符串中解析出url的各个参数。
import urllib.parse
url = 'https://www.baidu.com/s?wd=python'
result = urllib.parse.urlparse(url)
print(result)
输出如下:
ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=python', fragment='')
使用urllib.parse.urlunparse()函数,我们可以轻松地将解析出的各个URL部分重新组合为一个URL。
import urllib.parse
data = ['https','www.baidu.com', 'test', '','','']
url = urllib.parse.urlunparse(data)
print(url)
输出如下:
https://www.baidu.com/test
urllib.error模块包含了打开URL异常的集合。有时,当我们尝试打开一个无效的URL时,程序可能会出现异常。可以使用try和except语句来捕获这些异常。
import urllib.request
import urllib.error
try:
response = urllib.request.urlopen('http://www.wrongurl')
except urllib.error.URLError as e:
print(e.reason)
输出如下:
[Errno 8] nodename nor servname provided, or not known
urllib.robotparser模块可以用于解析robots.txt文件,以确定哪些页面可以爬取。robots.txt文件是由网站管理员创建的文本文件,用于告诉爬虫哪些页面应该被抓取和哪些页面不应该被抓取。下面是一个使用robotparser的简单示例:
import urllib.robotparser
rp = urllib.robotparser.RobotFileParser()
rp.set_url("http://www.example.com/robots.txt")
rp.read()
can_fetch = rp.can_fetch("*", "http://www.example.com/")
print(can_fetch)
输出结果为 True,表示可以抓取。