Python urllib.request模块详解:urlopen与Request用法指南

认真发呆
认真发呆
发布时间:2026-10-12| 2人浏览过
原创

本文深入解析Python内置的urllib.request模块,详细讲解urlopen()与Request()两个核心接口的语法、参数及返回值。通过代码示例演示如何获取HTTP响应、处理状态码、模拟浏览器头部伪装以及处理POST请求,帮助开发者掌握Python网络请求的基础操作。

urllib库的作用概述

urllib是Python标准库中内置的HTTP请求处理模块。它提供了一组高层级接口,使得通过HTTP或FTP协议访问网络资源变得如同操作本地文件般简单。在编写网页爬虫程序时,该库是发起网络请求、获取页面数据的核心工具之一。

Urllib库中主要模块的基本使用方法

一、urllib.request模块详解

1. 核心功能

urllib.request模块提供了构建HTTP(以及FTP等其他协议)请求的基础方法,允许程序模拟浏览器的请求发起过程。它支持通过不同协议获取URL信息,并能自动处理基础认证(Basic Authentication)、HTTP重定向(Redirections)以及Cookie管理等复杂场景。这些功能主要通过handlers和openers对象来实现。

2. 常用方法详解

2.1 urlopen()方法

语法格式如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

参数说明:url指定需要访问的网址;data用于提交Post数据,默认为None,当data不为None时,请求方式自动转为Post;timeout设置访问超时时间,防止请求挂起。

用例演示:

import urllib.request# 等价于from urllib import request
response = urllib.request.urlopen('https://www.baidu.com')
print("查看 response 响应信息类型: ",type(response))
page = response.read()
print(page.decode('utf-8'))

说明:直接调用urllib.request模块中的urlopen方法获取页面内容。返回的page数据类型为bytes,需通过decode方法解码转换为string类型。从输出结果可见,urlopen返回的对象类型为HTTPResponse。

urlopen返回一个类文件对象,该对象提供了以下常用方法:

read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与Python标准文件对象完全一致;

info():返回一个httplib.HTTPMessage对象,包含远程服务器返回的HTTP头信息。可通过Quick Reference to Http Headers查看完整的Http Header列表。

getcode():返回HTTP状态码。对于成功的HTTP请求,返回200;若返回404,则表示未找到该网址。

geturl():返回获取页面的真实URL。当urlopen(或opener对象)涉及重定向时,此方法尤为有用,因为最终获取的页面URL可能与初始请求的URL不同。

示例代码:

import urllib.request
response = urllib.request.urlopen('https://python.org/')
print("查看 response 的返回类型:",type(response))
print("查看反应地址信息: ",response)
print("查看头部信息1(http header):\n",response.info())
print("查看头部信息2(http header):\n",response.getheaders())
print("输出头部属性信息:",response.getheader("Server"))
print("查看响应状态信息1(http status):\n",response.status)
print("查看响应状态信息2(http status):\n",response.getcode())
print("查看响应 url 地址:\n",response.geturl())
page = response.read()
print("输出网页源码:",page.decode('utf-8'))

2.2 Request()方法

使用Request()函数包装请求对象,再通过urlopen()获取页面内容。这种方式允许更精细地控制请求头等信息。

语法格式如下:

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

示例代码:

import urllib.request
url = "https://www.lagou.com/zhaopin/Python/?labelWords=label"
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',
'Referer': 'https://www.lagou.com/zhaopin/Python/?labelWords=label',
'Connection': 'keep-alive'
}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode('utf-8')
print(page)

参数说明:

User-Agent :该头部字段可携带以下信息:浏览器名称及版本号、操作系统名称及版本号、默认语言。这些数据可从网页开发工具(通常按F12打开)的请求响应信息中获取,主要用于伪装浏览器身份以通过服务器验证。

Referer:该字段可用于防止盗链。部分网站会检查图片显示来源,通过验证Referer字段来确认请求是否合法。

Connection:表示连接状态,用于记录Session的状态,例如设置为keep-alive以维持长连接。

origin_req_host:表示请求方的主机名或IP地址。

unverifiable:指请求是否无法验证,默认为False。如果用户没有足够权限接收请求结果(例如请求HTML文档中的图片但无自动抓取权限),则unverifiable为True。

method:指定请求使用的方法,例如GET、POST、PUT等。

参考文档:https://www.jb51.net/article/209542.htm

总结

本文到此结束,希望能为读者提供有价值的帮助。欢迎持续关注本站,获取更多技术内容!

相关标签:

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

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 算法库。