Python urllib urlopen() 详解:URL协议、代理设置与数据传递

陆景行
陆景行
发布时间:2026-10-13| 1人浏览过
原创

本文详细解析Python标准库urllib中urlopen()方法的使用。涵盖URL协议规范(http/ftp/file)、代理服务器配置技巧,以及通过data参数传递字典数据的方法。结合源码分析,说明Python 2.3后支持的代理功能及文件对象行为,帮助开发者掌握基础网络抓取与高级请求配置。

Python urllib urlopen() 对象方法详解与代理配置补充

urllib 是 Python 内置的网页抓取接口,其核心方法是 urlopen(),该函数基于 Python 原生的 open() 方法实现。以下为主要功能说明:

urllib.urlopen('网址')

传入 urlopen() 的参数需严格遵循网络协议规范,例如 http 或 ftp。因此,URL 字符串必须以协议头开头,如 http://,示例如下:urllib.urlopen('http://www.baidu.com')。

若访问本地文件,需使用 file 关键字,例如:urllib.urlopen('file:nowamagic.py')。此处 nowamagic.py 指的是当前 classpath 指定的内容。若对路径查找有疑问,通常是因为对 Python 的 classpath 搜索顺序不熟悉。也可直接指定绝对路径,如:urllib.urlopen('file:F:\pythontest\nowamagic.py')。

同样支持打开 FTP 文件,语法格式为:urllib.urlopen(url='ftp://用户名:密码@ftp地址/')。

示例程序如下:

import urllib
f = urllib.urlopen('file:F:\pythontest\nowamagic.py')
a = f.read()
print a

若传入参数正确且网站可正常访问(无代理、封禁等特殊情况),urlopen() 将返回一个类似文件对象的对象,即上述代码中的 f。可通过 dir(f) 查看该对象支持的操作方法:

['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'fileno', 'fp', 'geturl', 'headers', 'info', 'next', 'read', 'readline', 'readlines', 'url']

调用 read() 方法可读取全部内容。由于 f 对象遵循先进先出(FIFO)机制,一旦执行 f.read(),后续再次调用 read() 将无法获取数据。因此,若需对数据进行后续处理,应将其存储至其他对象,如示例中的 a。此外,info() 和 geturl() 方法也是基于 f 这个文档对象实现的,因此使用

>>>f.geturl()
 'F://pythontest//nowamagic.py'

接下来介绍 urllib 的代理设置:

import urllib
proxies = {'http':'http://***.***.***.***:1984'}
filehandle = urllib.urlopen('http://www.需要代理才能访问的网站.com/',proxies = proxies)
a = filehandle.read()
print a

上述配置实现了通过代理访问网站并获取内容的基本功能。但若目标网站需要登录或 Cookie 支持,该如何处理?

查看 urllib 的源码:

def urlopen(url, data=None, proxies=None):
  """urlopen(url [, data]) -> open file-like object"""
  global _urlopener
  if proxies is not None:
    opener = FancyURLopener(proxies=proxies)
  elif not _urlopener:
    opener = FancyURLopener()
    _urlopener = opener
  else:
    opener = _urlopener
  if data is None:
    return opener.open(url)
  else:
    return opener.open(url, data)

从 urlopen 的源码可以看出,该方法还接受一个 data 参数。data 应为字典类型,因为浏览器向服务器发送数据时,通常也是以字典形式提交。

另外需注意,代理支持功能是在 Python 2.3 版本之后加入的。

感谢阅读,希望本文能对大家有所帮助,谢谢各位对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。