📜  Python Urllib 模块(1)

📅  最后修改于: 2023-12-03 15:34:05.659000             🧑  作者: Mango

Python Urllib 模块

Python的Urllib模块是一个处理URL(Uniform Resource Locators,统一资源定位符)的库,它包含了对HTTP、HTTPS、FTP等协议的处理。

常见的Urllib模块

Python 3中有四个模块:urllib.request、urllib.parse、urllib.error和urllib.robotparser。

  1. urllib.request: 用于打开和读取URL。
  2. urllib.parse: 用于解析URL。
  3. urllib.error: 包含打开URL过程中的异常的集合。
  4. urllib.robotparser: 用于解析robots.txt文件,以确定哪些页面可以爬取。
urllib.request

Urllib.request模块定义了一些函数和各种类,用于在Python中打开URL。这里介绍几个常用的类:

urlopen

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)
urlretrieve

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

urllib.parse模块解析URL,并提取其各个部分。使用该模块,我们可以轻松地从URL中提取出所需的信息。

urlparse

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='')
urlunparse

使用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

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

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,表示可以抓取。