当前位置: 首页 > news >正文

urllib的使用

urllib的使用

pyt内置库,利用它可以实现HTTP请求的发送。四大模块构成:

  • request:最基本的HTTP请求模块。
  • error:异常处理模块
  • parse:工具模块
  • robotparser:用于识别网站的robots.txt文件。

发送请求

使用urllib.request中的urlopen()方法可以向服务器发送一个基本的请求,该函数返回一个HTTPResponse对象。

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

基本使用

使用示例:

import urllib.requestresponse=urllib.request.urlopen('https://www.baidu.com')
print(response.status)
print(response.getheaders())
print(response.getheader('Server'))

data参数

我们还可以传递data参数。在添加该参数时需要使用bytes方法将参数转换为字节流编码格式(bytes类型)。如果传递了该参数,这个请求就是POST而不是GET了。

import urllib.request
import urllib.parse# urlencode将二元组转换为符合url规范的查询字符串
# bytes函数将第一个参数从字符串转化为字节序列
data = bytes(urllib.parse.urlencode({'name' : 'germey'}),encoding='utf-8')response = urllib.request.urlopen('https://www.httpbin.org/post',data=data)
print(response.read().decode('utf-8'))

timeout参数

设置超时,通常额异常处理机制一起使用:

import urllib.request
import urllib.error
import sockettry:response = urllib.request.urlopen('https://www.httpbin.org/get',timeout=0.1)
except urllib.error.URLError as e: # 捕获该异常if isinstance(e.reason,socket.timeout): # 如果该异常的类型是socket.timeoutprint('TIME OUT')

Request类

urlopen可以发送最基本的请求,使用Requeset类可以构建更加复杂的请求。

import urllib.requestrequset = urllib.request.Request('https://cn.bing.com')
response = urllib.request.urlopen(requset)
print(response.read().decode('utf-8'))

我们可以通过构造Request对象来构造更复杂的请求:

from urllib import request, parseurl = 'https://www.httpbin.org/post'
headers = { # 请求头'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Host': 'www.httpbin.org'
}
dict = {'name':'germey'}
data = bytes(parse.urlencode(dict),encoding='utf-8')
req = request.Request(url=url,data=data,headers=headers,method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

高级用法

使用Handler可以支持更高级的操作,比如cookie处理、代理设置等。Handler就是各种处理器,用于处理不同的操作,这使得我们几乎可以实现HTTP请求中的所有功能。Handler类中的最基本父类是BaseHandler

OpenerDirector较之Request类和urlopen方法可以提供更加深层次的配置。Opener提供的open方法返回的响应类型和urlopen如出一辙。

我们可以利用Handler来构建Opener。比如处理网页的验证:

from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler,build_opener
from urllib.error import URLErrorusername = 'admin'
password = 'admin'
url = 'https://ssr3.scrape.center/'p = HTTPPasswordMgrWithDefaultRealm() # 该类用于管理和存储http请求中的用户名和密码
p.add_password(None,url,username,password) # 使用默认域
auth_handler = HTTPBasicAuthHandler(p) # 该处理器用于处理http基本认证
opener = build_opener(auth_handler)try:result = opener.open(url)html = result.read().decode('utf-8')print(html)
except URLError as e:print(e.reason)

文章转载自:

http://JqOmvpc7.LLyqm.cn
http://vHV615zR.LLyqm.cn
http://Svt1YP74.LLyqm.cn
http://8lFFGKJO.LLyqm.cn
http://CrIUq5hf.LLyqm.cn
http://lVJ3zueH.LLyqm.cn
http://loL6sI6C.LLyqm.cn
http://SxFUKisR.LLyqm.cn
http://MTLFarud.LLyqm.cn
http://AwILL38D.LLyqm.cn
http://DCdYKZyk.LLyqm.cn
http://lbKH8UsS.LLyqm.cn
http://81LwUAFk.LLyqm.cn
http://bTG8kA9t.LLyqm.cn
http://iRE2SpEk.LLyqm.cn
http://yrEp7ED8.LLyqm.cn
http://5KAq0bJv.LLyqm.cn
http://1nOiN6Be.LLyqm.cn
http://PefAHnjX.LLyqm.cn
http://4QSTywb8.LLyqm.cn
http://2VvVChDN.LLyqm.cn
http://7r57mTdc.LLyqm.cn
http://vFjFSwQW.LLyqm.cn
http://cSxtYkri.LLyqm.cn
http://4vIaA71K.LLyqm.cn
http://ETI2BNzL.LLyqm.cn
http://C8CBYBif.LLyqm.cn
http://nvaXTJPr.LLyqm.cn
http://3AfGdnID.LLyqm.cn
http://h2WtUSa3.LLyqm.cn
http://www.dtcms.com/a/379519.html

相关文章:

  • AFSim2.9.0学习笔记 —— 4.1、创建项目,以此项目介绍工作中Wizard使用(红方/蓝方武器平台、阵营、更换图标等,多图详细介绍)
  • 机器人驭风而行:低空经济如何开启智能新纪元【科普类】
  • 【论文速读】LLM Compiler:并行函数调用的新范式
  • 【复习】计网每日一题---海明校验码
  • CVPR 2025最佳论文解读|VGGT:Visual Geometry Grounded Transformer
  • 深度学习里的树模型TabNet
  • 洛谷P5250 【深基17.例5】木材仓库 (集合法)详解
  • zsn的作品集
  • 磁共振成像原理(理论)6:自由感应衰减 (Free Induction Decays)
  • 第3节-使用表格数据-CHECK约束
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
  • 【观察】傅建平:迈向“数据强国”,打通数据要素化“任督二脉”的三把钥匙
  • 一些常用的CAPL小功能
  • 当Claude Code失灵,Qwen Code能否成为你的救星?
  • Spring 项目骨架
  • C++轻量级配置管理器升级版
  • WiFi CSI标准
  • 9、从水果店账本到AI大脑:矩阵运算如何驱动现代人工智能?零基础完全指南(Transformer数学原理)
  • 外部碎片和内部碎片
  • Product Hunt 每日热榜 | 2025-09-11
  • 【前沿技术拓展Trip Two】具身智能
  • LeetCode 1658. 将x减到0的最小操作数
  • 二十二、包管理与发布 (Cargo 进阶)
  • WAF如何为你的网站筑起智能防线?
  • 【Leetcode】高频SQL基础题--1327.列出指定时间段内所有的下单产品
  • 数据结构与算法:绪论和线性表
  • ToDesk企业版高效助力睿尔博汽车信息服务!
  • 基于RFID技术的宠物自动喂食器方案
  • Java 异常体系全解析
  • Linux 系统资源负载控制脚本:CPU 内存一键管理(后台常驻版)