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

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

本文深入解析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 相关产品和应用

全部下载

专题列表