python爬虫-基本库-urllib库(常用速查)

作者:bigfootyazi日期:2026/6/1

urllib库

  • 库的用途
  • 四个基本模块
    • request模块
    • error模块
    • parse模块
    • robotparser模块

库的用途

实现HTTP请求的发送
扩展:基本HTTP库有urllib、requests、httpx等

四个基本模块

  • request 基本的HTTP请求模块
  • error 异常处理模块
  • parse 工具模块,提供URL的处理方法
  • robotparser 识别网站的robost.txt文件

request模块

  • urlopen
1
2(function) def urlopen(
3    url: str | Request,
4    data: _DataType = None,
5    timeout: float | None = socket._GLOBAL_DEFAULT_TIMEOUT,
6    *,
7    cafile: str | None = None,
8    capath: str | None = None,
9    cadefault: bool = False,
10    context: SSLContext | None = None
11) -> _UrlopenRet
12

只能处理基本的请求,如果要添加详细的系你想,需要用下面的
Request类来构建请求

  • Request
1class Request(
2    url: str, # 必传,其他参数可选
3    data: _DataType = None, # 必须传bytes类型,如果是字典类型先用urllib.parse.urlencode进行编码
4    headers: MutableMapping[str, str] = {},# 字典
5    origin_req_host: str | None = None,
6    unverifiable: bool = False,
7    method: str | None = None
8)
9
  • 更高级的用法
    • handler类,有几个子类:
      HTTPDefaultErrorHandler 用于处理HTTP响应错误
      HTTPRedirecHandler用于处理重定向
      HTTPCookieProcessor 用于处理Cookie
      ProxyHandler 用于设置代理,代理默认为空
      HTTPasswordMgr 用于管理密码,它维护着用户名密码的对照表
      HTTPBasicAuthHandler用于管理认证, 如果一个链接在打开时需要认证,用这个类来解决
    • Opener类

验证

1from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener
2from urllib.error import URLError
3
4username = 'admin'
5password = 'admin'
6url = 'https://ssr3.scrape.center/'
7
8p = HTTPPasswordMgrWithDefaultRealm()
9p.add_password(None, url, username, password)
10auth_handler = HTTPBasicAuthHandler(p)
11opener = build_opener(auth_handler)
12
13try:
14    result = opener.open(url)
15    html = result.read().decode('utf-8')
16    print(html)
17except URLError as e:
18    print(e.reason)
19

代理

1from urllib.error import URLError
2from urllib.request import ProxyHandler, build_opener
3
4proxy_handler = ProxyHandler({
5    'http':'http://127.0.0.1:8080',
6    'https':'https://127.0.0.1:8080'
7})
8opener = build_opener(proxy_handler)
9
10try:
11    reponse = opener.open('https://www.baidu.com')
12    print(reponse.read().decode('utf-8'))
13except URLError as e:
14    print(e.reason)
15

Cookie

1import http.cookiejar, urllib.request
2# 1.创建罐子
3cookie = http.cookiejar.CookieJar()
4# 2.再用罐子造处理器
5handler = urllib.request.HTTPCookieProcessor(cookie)
6# 3.创建opener
7opener = urllib.request.build_opener(handler)
8# 4.执行open函数
9response = opener.open('https://www.baidu.com')
10# 5.遍历输出
11for item in cookie:
12    print(item.name + '=' + item.value)
13
14

error模块

  • URlError URlError.reason
  • HTTPError HTTPError .codeHTTPError .reasonHTTPError .headers

parse模块

常用的方法

  • urlparse 解析url,生成结果是一个6字段的命名元组
1(function)
2def urlparse(
3    url: str,
4    scheme: str = "",
5    allow_fragments: bool = True
6) -> ParseResult: ...
7
8def urlparse(
9    url: bytes | bytearray | None,
10    scheme: bytes | bytearray | Literal[''] | None = "",
11    allow_fragments: bool = True
12) -> ParseResultBytes: ...
13
  • urlunparse 是上一个方法的逆方法,用于构造url,接受的参数必须是6字段 的可迭代对象
  • urlsplit 类似与第一种方法,区别在于合并path和params,返回一个5字段的命名元组
  • urlunsplit 上一个方法的逆
  • urljoin 第一个参数提供base链(之包含scheme、netloc、path),第二个参数为新链,方法会分析新链并用基链补充后返回结果
  • urlencode常用语构造GET请求参数,可以将一个字典或者含一对元素序列的系列构造为GET请求参数
1(function) def urlencode(
2    query: _QueryType,
3    doseq: bool = False,
4    safe: str | bytes = "",
5    encoding: str | None = None,
6    errors: str | None = None,
7    quote_via: _QuoteVia = quote_plus
8) -> str
9
  • parse_qs 上一个方法的逆,返回字典
  • parse_qsl与上一个方法类似,返回序列
  • quote对中文等语言的请求参数进行编码,可以避免乱码问题,
  • unquote上一个方法的逆,对URL编码进行解码

robotparser模块

用于分析网站的Robots协议,协议通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下,搜索爬虫在访问一个站点时,首先会检查这个站点根目录下是否存在robots.txt文件,如果存在,就会根据其中定义的爬取范围来爬取。如果没有找到这个文件,搜索爬虫便会访问所有可直接访问的页面


python爬虫-基本库-urllib库(常用速查)》 是转载文章,点击查看原文


相关推荐


📱随时随地大小编:TraeSolo 移动端初体验
海石2026/5/12

1、前言 最早认识Trae SOLO 还是在Trae IDE 内测 SOLO 模式的时候 (大概是2025年的11月) 这一转眼,Trae SOLO 居然都已经单独出了 桌面端 和 移动端 了 除了劳动节那阵联动星巴克☕吸引我之外不是 咳咳,最有魅力的还是双端协同这一点上 本文就是一篇“利用Trae SOLO的双端协同能力,进行随时随地开发微信小程序”的实践分享文章, 非常欢迎掘友们一起交流交流,共同探讨Trae SOLO的最佳使用“范式”~ 2、结果先行 1、移动端可以随时查看微信


window管理开发环境篇 - 持续更新
pe7er2026/5/2

我个人非常喜欢那种一键部署开发环境的方式,但时间一长,我们会淡忘如何部署开发环境,它会让我们失去对开发环境的控制。 下面我记录window环境下我是如何管理开发环境的。 安装Scoop 设置前提条件 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 典型安装 irm get.scoop.sh | iex 使用代理安装 iex "& {$(irm get.scoop.sh -Proxy 'http://<ip:


NineData 新增支持 GaussDB 到 StarRocks 实时数据复制能力
NineData2026/4/23

很多企业在完成核心系统国产化之后,业务已经稳定跑在 GaussDB 上,但很快会进入下一阶段:经营分析、实时看板、主题查询、风控报表、数据服务层都需要尽快接上。 如何实现呢?把业务数据实时复制到数仓即可。但通常会有如下挑战: 历史数据需要快速初始化到位。 业务持续写入时,目标端要持续、稳定地追平变化。 任务运行出了问题,要能第一时间感知,如果等到下游发现数据不对那就晚了。 正式上线前,要能全自动化对复制结果做核验,人工抽样费时费力还容易出错。 这个时候,一条能长期稳定的实时数据复制链路就很


告别 Python 依赖!用 LangChainGo 打造高性能大模型应用,Go 程序员必看!
GetcharZp2026/4/14

想用 Go 语言开发大模型应用却找不到好用的框架?本文深度解析 LangChainGo,手把手教你快速上手,涵盖 RAG、智能体等核心场景,助你轻松跨入 AI 开发大门! 在人工智能大行其道的今天,提到 LLM(大语言模型)应用开发,很多人脑海中浮现的第一反应就是 Python。确实,Python 拥有得天独厚的生态。但随着 AI 应用进入“工程化”下半场,开发者们开始面临新的挑战:并发性能瓶颈、部署环境复杂、内存消耗大…… 这时候,Go 语言的优势便凸显了出来。其天生的并发处理能力(Gor


**发散创新:基于以太坊侧链的高性能去中心化应用部署实战**在区块链生态中,*
好家伙VCC2026/4/6

发散创新:基于以太坊侧链的高性能去中心化应用部署实战 在区块链生态中,主链性能瓶颈一直是制约大规模 DApp 发展的核心问题。为突破这一限制,8*侧链(Sidechain)技术应运而生**,它通过与主链的安全通信机制,在保证去中心化前提下实现高吞吐量和低延迟交易处理。 本文将以 Solidity + Golang + Polygon SDK 为例,构建一个完整的侧链开发流程,并展示如何将智能合约部署到自定义侧链节点上,同时确保与 Ethereum 主网的状态同步验证。 🔧 一、为什么


彻底搞懂大模型 Temperature、Top-p、Top-k 的区别!
Surmon2026/3/29

调用大模型的时候,总会看到几个耳熟能详的参数:Temperature、Top-p、Top-k。文档里通常的解释都是:控制输出的随机性。也就是:Temperature 和 Top-p 的值越高,模型输出的结果会越随机、越富有创造性,反之,数值越低,输出的结果就越确定、越保守。 随机性,到底是个什么意思?为啥随机性就可以表现为创造性? 回答这个问题,得先从一个最朴素的问题开始:模型是如何回答问题的。 我之前在 《从统计学习到通用智能》 中曾经提到过,大模型在输出文本的时候,本质上是在 滚动地预测下


当我开始像写代码一样和AI对话,一切都变了
lbh2026/3/21

当AI成为你的开发伙伴,如何让它真正听懂你的需求? 身为一名前端开发。在日常开发中,我经常和AI打交道——用它写代码、调试bug、优化性能、设计方案。但说实话,很长一段时间里,我和AI的对话就像这样: 我:“帮我写一个响应式导航栏。” AI:(给出一个基础版) 我:“不是这样的,要带下拉菜单。” AI:(加上下拉菜单) 我:“还要在移动端变成汉堡菜单。” AI:(加上汉堡菜单) 我:“……能不能一次说完?” 你是不是也有类似的经历? 后来我慢慢发现,问题不在AI,而在我自己。就像写代码一样


使用Fetch API 探索前后端数据交互
独泪了无痕2026/3/13

前言   在当今的 Web 开发中,前端与后端的数据交互是构建动态应用的核心。API 是连接不同软件应用的重要桥梁,允许开发者通过 HTTP 请求与服务器交互,高效调用API数据对于构建现代 Web 应用至关重要。传统的页面刷新方式已经无法满足用户对流畅体验的需求,而 Fetch API 的出现为 JavaScript 带来了全新的生命力。 一、Fetch API 概述 1.1 Fetch API 是什么❓   Fetch API 是现代浏览器提供的一个用于发起网络请求的接口,用于发起 HTTP


C# 可变引用类型和不可变引用类型
CnLg.NJ2026/3/4

引用类型(class)的实例存储在托管堆上,变量保存的是对象的引用。根据对象创建后其状态是否允许被修改,可以将引用类型分为可变(Mutable)和不可变(Immutable)两类。 1. 可变引用类型 定义:对象创建后,其内部状态(字段、属性)可以被修改。 特点: 可以通过公开的 setter 或方法更改属性值。 同一对象在不同时间点可能呈现不同状态。 多线程环境下需要同步机制保证线程安全。 容易产生副作用,因为多个引用可能指向同一对象,一处修改会影响所有引用。


【HarmonyOS】day37:React Native实战项目+关键词高亮搜索Hook
星空22232026/2/24

【HarmonyOS】React Native实战项目+关键词高亮搜索Hook 📅 更新时间:2026年2月 🎯 技术栈:HarmonyOS NEXT + React Native 0.72.5 + TypeScript ⏱️ 阅读时间:约15分钟 前言 进入2026年,移动端开发格局已发生根本性变化。随着HarmonyOS NEXT彻底剥离AOSP,开发者面临着Android、iOS、HarmonyOS三足鼎立的局面。如何用一套代码高效覆盖三大平台? 本文将带你从零开

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读