Python 使用 Urllib.Request 和 urlopen() 访问互联网

⚡ 智能摘要

urllib 是标准 Python 用于访问互联网数据的模块,允许程序打开 URL并检索 HTML、JSON 或二进制内容。urllib.request.urlopen() 函数连接到网址并将服务器响应直接读取到内存中。 Python.

  • 🔘 标准库: urllib 附带 Python 并将请求、错误、解析和 robotparser 模块捆绑在一起。 URL 任务。
  • ☑️ 打开 URL: urllib.request.urlopen() 函数打开一个连接,getcode() 返回 HTTP 状态,例如 200。
  • 阅读回复: read() 方法返回原始字节,decode(“utf-8”) 将其转换为可读文本。
  • 🧪 处理错误: 捕获 HTTPError 和 URLurllib.error 出错,因此请求失败不会导致程序崩溃。
  • 🛠️ 下载文件: urlretrieve() 函数保存任何 URL 直接写入磁盘,非常适合图像、PDF 和数据集。
  • 🤖 人工智能就绪: urllib 获取数据集和 API 数据,为机器学习模型和 AI 管道提供数据。

Python 使用 Urllib 进行互联网访问

以下各节解释了 urllib 是什么,以及如何打开一个 urllib 文件。 URL 并阅读其 HTML,以及如何处理错误、下载文件,并在 urllib 和 requests 库之间进行选择。

什么是 urllib?

urllib 是一个 Python 可用于打开的模块 URL它定义了函数和类来帮助 URL 动作。

与 Python您还可以访问和检索来自互联网的数据,例如 XML、HTML 和 JSON 格式的数据,然后直接使用这些数据。在下面的章节中,我们将了解如何从网络检索数据。例如,这里我们使用…… Guru99视频 URL,使用以下方式访问它 Python并打印此 HTML 文件。 URL.

urllib 包包含多个模块:urllib.request 用于打开 URLs,urllib.error 用于处理请求可能引发的异常,urllib.parse 用于构建和解析 URLs,以及用于读取 robots.txt 文件的 urllib.robotparser。

怎么开 URL 使用 Urllib

在运行连接互联网数据的代码之前,我们需要导入…… URL 库模块,或“urllib”。

可选 URL 使用 Urllib

  • 导入 urllib
  • 定义主要功能
  • 声明变量 webUrl
  • 然后调用 urllib 库中的 urlopen 函数。
  • 此 URL 我们正在开业的是 Guru99 个教程 YouTube
  • 接下来,我们打印结果代码。
  • 通过对我们创建的 webUrl 变量调用 getcode 函数来获取结果代码。
  • 我们将其转换为字符串,以便将其与字符串“结果代码”连接起来。
  • 这将返回一个标准的 HTTP 状态码“200”,表示 HTTP 请求已成功处理。

如何从……获取 HTML 文件 URL in Python

您还可以使用 read() 函数读取 HTML 文件。 Python运行代码后,HTML 文件将显示在控制台中。

来自 HTML 文件 URL in Python

  • 对 webUrl 变量调用 read() 函数
  • read() 方法允许您读取数据文件的内容
  • 阅读全部内容 URL 将数据存储到名为 data 的变量中。
  • 运行代码,它将以 HTML 格式打印数据。

这是完整的代码:

Python 2示例

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3示例

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

如何处理urllib错误: URL错误和 HTTPError

请求并非总能成功。当出现错误时,urllib 会抛出异常而不是返回数据,因此处理这些错误至关重要。urllib.error 模块定义了两个主要的异常类。

  • HTTP错误 当服务器返回错误状态码(例如 404 Not Found 或 500 Internal Server Error)时,会引发此异常。它包含状态码和响应正文。
  • URL误差 当服务器完全无法访问时,例如由于域名错误或网络连接中断,会引发此异常。它包含一个原因属性,用于解释失败原因。

因为 HTTPError 是以下类的子类 URL错误时,务必先捕获 HTTPError 错误,以便分别处理每种错误类型:

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

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

处理这些异常可以防止程序崩溃,并允许您记录问题、重试请求或回退到缓存数据。

如何从某个网站下载文件 URL 使用 urllib

读一个 URL 将响应保存到内存中对于小页面来说是可行的,但对于图像、PDF 文档或数据集,直接将响应保存到磁盘会更方便。urllib.request 模块提供了两种简单的方法来实现这一点。

urlretrieve() 函数下载一个 URL 直接写入本地文件,只需一行代码:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

为了获得更多控制权,请打开 URL 自行写入字节。以二进制模式打开本地文件,因为 urlopen() 返回的是字节,而不是文本:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

对于非常大的文件,使用 response.read(8192) 在循环中进行读写操作,这样就不会一次性将整个文件保存在内存中。

urllib 与 requests 库的比较 Python

urllib 是以下部分的一部分 Python 由于它是标准库,因此无需安装即可在任何地方使用。第三方 requests 库并非内置,但许多开发者更喜欢用它来处理日常 HTTP 请求,因为它的语法更简洁、更易读。

主要区别在于:

  • 安装方式: urllib 附带 Python而 requests 库必须使用 pip 安装。
  • 解码: urllib 返回原始字节,需要您自行解码,而 requests 会自动解码文本和 JSON。
  • 方便: requests 库用更少的代码处理会话、cookie 和自定义标头。
  • 依赖关系: urllib 没有添加任何内容,而 requests 则依赖于底层的 urllib3。

如果您希望零依赖或只需要快速的一次性请求,请选择 urllib。对于涉及身份验证、会话或频繁 API 调用的大型项目,请选择 requests。两者都发送相同的底层 HTTP 请求,因此最终的选择取决于便利性与依赖项数量的多少。

常见问题

urlopen() 返回一个 HTTP 响应对象,通常是 http.client.HTTPResponse 对象。您可以调用 read() 获取原始字节,调用 getcode() 读取状态码,调用 headers 或 info() 检查元数据,例如内容类型和长度。

urllib2 属于 Python 2。 在 Python 3. 它进行了重组:其功能被拆分为用于打开的 urllib.request。 URLs 和 urllib.error 用于处理异常。 Code 为 urllib2 编写的代码必须更新为导入 urllib.request。

`read()` 返回的是字节数组,而不是字符串,因为 `urlopen()` 事先不知道编码格式。调用 `decode(“utf-8”)` 可以将这些字节数组转换为可读文本,这样您就可以打印、搜索或解析 HTML 或 JSON 内容。

打开 URL 使用 urlopen() 读取字节,解码,然后使用 json 模块解析:json.loads(response.read().decode(“utf-8”))。这将返回一个 Python 您可以直接使用字典或列表,这在调用 Web API 时很常见。

包装 URL 在 urllib.request.Request 对象中,并在打开请求之前添加请求头:request.add_header(“User-Agent”, “Mozilla/5.0”),然后将请求传递给 urlopen()。自定义请求头有助于解决服务器屏蔽默认请求头的问题。 Python 用户代理。

是的。urllib 可以从 Web API 获取数据集、CSV 文件和 JSON 数据,然后您可以将其解码并加载到 pandas 或 NumPy 中。它是一种轻量级、无依赖项的方式,可以将训练数据导入机器学习流程。

是的。GitHub Copilot 可以自动补全常见的 urllib 模式,例如 urlopen() 调用、Request 对象和 try/except 错误处理。它可以加快样板代码的编写速度,但您仍然应该进行验证。 URLAI 助手建议的 s、标头和异常处理。

使用 urllib.parse.urlencode() 对参数进行编码,使用 encode() 将其转换为字节,然后将其作为 data 参数传递给 urlopen() 或 Request 对象。提供 data 参数会自动使 urllib 发送 POST 请求而不是 GET 请求。

总结一下这篇文章: