python的urllib模块和http模块
1.python的urllib库用于操作网页,并对网页内容进行处理
urllib包有如下模块:
urllib.request:打开和读取URL
urllib.error: 包含urllib.request抛出的异常
urllib.parse: 解析URL
urllib.robotparser: 解析robots.txt文件
urllib的request模块
urllib.request定义了一些打开URL的函数和类,包含授权验证、重定向、浏览器cookies等
urllib.request可以模拟浏览器的一个请求发起过程
我们可以使用urllib.request的urlopen方法来打开一个URL,语法格式如下
urllib.request.urlopen(url, data=None, [timeout,]*, cafile=None, capath=None, cadefault=False, context=None)
url:url地址
data:发送到服务器的其他数据对象,默认为None
timeout:设置访问超时时间
cafile和capath:cafile为CA证书,capath为CA证书的路径,使用HTTPS需要用到
cadefault:已经被启用
context:ssl.SSLContext类型,用来 指定SSL设置
read来读取全部内容
import urllib.request
myurl=urllib.request.urlopen('http://www.baidu.com')
print(myurl.read()) #read用来读取网站的所有内容
可以指定长度,指定长度为300个字符
import urllib.request
myurl=urllib.request.urlopen('http://www.baidu.com')
print(myurl.read(300))
通过readline读取一行内容
import urllib.request
myurl=urllib.request.urlopen('http://www.baidu.com')
print(myurl.readline())
readlines来读取文件的所有内容,读取到的内容赋值给一个列表变量
from urllib.request
myurl=urllib.request.urlopen('http://www.baidu.com')
print(myurl.readlines())
判断网页是否可以正常访问
import urllib.request
myurl=urllib.request.open('http://www.baidu.com')
print(myurl.getcode()) #返回问的状态码是多少
try:myurl2=urllib.request.urlopen('http://www.baidu.com/no.html')
except urllib.error.HTTPError as e:if e.code==404print(404)
抓取网页保存到本地
from urllib.request
myurl=urllib.request.urlopen('http://www.baidu.com')
f=open('1.html','wb')
context=myurl.read()
f.write(context)
f.close()
url编码和解码可以使用quote和unquote方法
import urllib.request
encode=urllib.request.quote('http://www.baidu.com') #对字符进行编码
print(encode)
decode=urllib.request.unquote(encode) #对变量encode进行解码
print(decode)结果为:
https%3A//www.runoob.com/
https://www.runoob.com/
模拟头部信息:
我们抓取网页一般需要对header(网页头部信息)进行模拟,需要用到urllib.request.Request类
class urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)url:url地址
data:发送到服务器其他数据对象,默认为None
headers:http请求的头部信息,字典格式
origin_req_host:请求的主机地址,ip或者域名
unverifiable:少用参数,用于设置网页是否需要验证,默认为False
method:请求方法,GET,POST,DELETE,PUT等
实例1-1
import urllib.request
import urllib.parse
url='https://www.runoob.com/s=' #这个是菜鸟的搜索网址
keyword='java教程' #这个是搜索的内容
keycode=urllib.request.quote(keyword) #对请求进行编码
urlall=url+keycode
header={'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
#这里reqeust对象通过Request类来构建http亲贵
request=urllib.request.Request(urlall,headers=header)
#这里请求了request这个对象,然后结果赋值到了response里
response=urllib.reqeust.urlopen(request)
print(response.read())
执行以上代码会打印出来菜鸟教程中搜索java教程后的页面代码
实例1-2 使用POST传递数据
1.先定义一个POST的html页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="" type="text" name="myform">Nmae:<input type="text" name="name"><br>Pass:<input type="text" name="pass"><br><input type="submit" value="提交"></form><hr><?phpif(isset($_POST['name']) &&$_POST['pass']){echo 'hello word!';}?>
</body>
</html>
使用urllib来提交数据,看回显源码
import urllib.request
import urllib.parse
url='https://www.runoob.com/try/py3/py3_urllib_test.php' #提交到表单页面
data={'name':'RUNOOB','tag':'菜鸟教程'} #提交数据
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
}
data=urllib.parse.urlencode(data).encode() #对参数进行编码,解码使用urllib.parse.urldecode()
request=urllib.request.Request(url,data,header)
response=urllib.request.urlopen(request).read()
print(response.decode())
源码如下,通过1.html来打开就可以看到网站回显了
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com) urllib POST 测试</title>
</head>
<body>
<form action="" method="post" name="myForm">Name: <input type="text" name="name"><br>Tag: <input type="text" name="tag"><br><input type="submit" value="提交">
</form>
<hr>
RUNOOB, 菜鸟教程</body>
</html>
urllib的error模块
1.urllib.error模块为urllib.request所引发的异常定义了异常类,基础异常类是URLError
urlib.error包含了两个方法,URLError和HTTPError
URLError是OSError的一个子类,用于处理程序在遇到问题会引发此异常,包含的属性reason为引发异常的原因,
HTTPError是URLError的一个子类,用于处理特殊HTTP错误,例如作为认证请求的时候,包含的属性code为HTTP的状态码,reason为引发异常的原因,headers为导致HTTPError的特定http请求的http响应头
实例1-1:对不存在的页面抓取并处理异常
import urllib.request
import urllib.errormyURL1 = urllib.request.urlopen("https://www.runoob.com/")
print(myURL1.getcode()) # 200try:myURL2 = urllib.request.urlopen("https://www.runoob.com/no.html")
except urllib.error.HTTPError as e:if e.code == 404:print(404) # 404
urllib的parse模块
urllib.parse模块用于解析URL,格式如下
urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)urlstring 字符串的URL地址,scheme为协议类型
allow_fragments 参数为false,则无法识别片段标识符,他们被解析为路径,参数或者查询组件的一部分,并fragments在返回值中设置为空字符串
实例1-1
from urllib.parse import urlparse
o=urlparse("https://www.runoob.com/?s=python+%E6%95%99%E7%A8%8B")
print(o)返回结果:
ParseResult(scheme='https', netloc='www.runoob.com', path='/', params='', query='s=python+%E6%95%99%E7%A8%8B', fragment='')
从以上可以看出,内容是一个元组,包含6个字符串:协议,位置,路径,参数,查询,判断
我们可以直接读取协议:
from urllib.parse import urlparse
o=urlparse('https://www.runoob.com/?s=python+%E6%95%99%E7%A8%8B')
print(o.scheme) #schema是协议返回结果为:
https
说明用的是https协议
urlparse模块的解释
属性 索引 值 值(如果不存在)
scheme 0 URL协议 scheme参数
netloc 1 网络位置 空字符串
path 2 分层路劲 空字符串
params 3 最后路径元素的参数 空字符串
query 4 查询组件 空字符串
fragment 5 片段识别 空字符串
username 用户名 None
password 密码 None
hostname 主机名(小写) None
port 端口号为整数(如果存在) None
http包简介:
http包提供了使用HTTP协议的一些功能,其主要模块如下:
http.client 底层的http协议客户端,可以为urllib.request模块所用
http.server 提供了基于http协议客户端,可以为urllib.request模块所用
http.cookies coolies的管理工具
http.cookiejar 提供了cookies的持久化支持在http.client模块中用于客户端的类如下所示,
HTTPConnection 基于HTTP协议的访问客户端
HTTPSConnection 基于HTTPS协议的访问客户端
HTTPResponse 基于HTTP协议的服务端响应HTTPConnection构造方法原型如下:
HTTPConnection(host,port=None,[timeout,]source_address=None)参数意义如下:
host 服务器的地址
port 用来指定访问的服务器端口,不提供则从host中提取,否则使用80端口
timeout 指定超时秒数HTTPConnection对象的主要方法如下
request(method,url,body,headers)
method 发送的操作,一般为GET或POST
url 进行操作的URL
body 发送的数据
headers 发送的HTTP头当服务器发送请求后,可以使用HTTPConnection对象的getresponse()方法返回一个HTTPResponse对象,使用HTTPConnection对象的close()方法可以关闭服务器的连接,除了使用 request方法以外,还可以使用以下方法向服务器发送请求 putrequest(request,selector,skip_host,skip_accept_encoding)
putheader(header,argument,...)
endheaders()
send(data)putrequest方法的参数如下
request 所发送的操作,如POST,GET,PUT
selector 进行操作的URL
skip_host 可选参数,若为真,禁止自动发送'HOST”
skip_accept_encoding 可选参数,若为真,禁止自动发送Accept-Encoding:headersputheader方法的参数含义如下
header 发送的HTTP头
argument 发送的参数send方法的含义
data 发送的数据
实例1-1 使用http.client.HTTPConnection对象访问网站,
from http.client import HTTPConnection
mc=HTTPConnection('www.baidu.com') #定义基于http的访问客户端对象
mc.request('GET','/') #请求方法为GET,url为根目录
res=mc.getresponse() #获取服务器响应
print(res.status,res.reason) #status返回状态码,reason返回对应状态码的短语OK
print(res.read().decode()) #读取通过第4行响应的所有内容,内容进程字节串解码
代码说明:进本的访问示例,实例化http.client.HTTPConnection对象,指定请求方法为GET,最后使用getresponse()方法取得访问的网页,打印出响应的状态与网页
相关文章:
python的urllib模块和http模块
1.python的urllib库用于操作网页,并对网页内容进行处理 urllib包有如下模块: urllib.request:打开和读取URL urllib.error: 包含urllib.request抛出的异常 urllib.parse: 解析URL urllib.robotparser࿱…...
Java [后端] 开发日常记录(1)
目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下: 1、常用的注解 若返回的字段中有NUll,则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…...
jetbrain 安装 copilot
问题一:Sign in failed. Reason: Request signInInitiate failed with message: Request to /github.com/login/device/code> timed out after 30000ms, request id: 11, error code: -32603 解决方案: 参考资料:https://github.com/orgs/…...
万里数据库GreatSQL监控解析
GreatSQL是MySQL的一个分支,专注于提升MGR(MySQL Group Replication)的可靠性及性能。乐维监控平台可以有效地监控GreatSQL,帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理,收集数据库性…...
OpenCV-Python实战(9)——滤波降噪
一、均值滤波器 cv2.blur() img cv2.blur(src*,ksize*,anchor*,borderType*)img:目标图像。 src:原始图像。 ksize:滤波核大小,(width,height)。 anchor:滤波核锚点,…...
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用DTA针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集DTA介绍算法流程 DTA代码实现DTA算法实现攻击效果 代码汇总dta.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行分类 Pytorch | 从零构建…...
Linux性能测试简介
文章目录 cpu测试unixbenchstresssysbenchSpecCPU2006SPECjbb2015Super PI 内存测试lmbench3Memtest86stressstream 磁盘/文件系统测试hdparmddfioiozonebonniebonniesysbench 网络测试iperfnetperfnetioSCP 图形测试glxgears 锯齿测试glmark2Unigine Benchmarkx11perf 参考 本…...
Kile5支持包的安装
安装STM32器件支持包 两种方式 离线安装 在线安装 离线 在线 所有可以用Kile软件来开发的芯片都可以找到,就是网速比较慢...
【Ubuntu 系统 之 开启远程桌面SSH登录】
【Ubuntu 系统 之 开启远程桌面&SSH登录】 一、开启 SSH 登录二、开启远程桌面1、更新包管理器并安装 xrdp1.1、遇到错误1.2、解决方法 2、安装桌面环境(如果服务器上没有 GUI)3、配置 xrdp 使用默认的 GNOME 桌面环境4、配置防火墙允许远程桌面连接…...
MySQL 索引分类及区别与特点
MySQL 索引分类及区别与特点 索引是数据库中用于加速数据检索的数据结构。MySQL 支持多种类型的索引,每种索引有其特定的使用场景和特点。以下是 MySQL 中常见的索引分类及其区别与特点: 1. 按数据结构分类 (1) BTree 索引 特点: 默认的索…...
对中文乱码的理解,遇到乱码该怎么办。
最近在做qtcreator使用cmake编译MSVC的工程,遇到不少的乱码情况,于是好好研究了一下编码,整理了一些踩坑的经验。 一、中文乱码的来源 目前常见到的中文编码其实就两种,UTF8和GBK。 我们遇到的绝大多数乱码,就是系统…...
《机器学习》从入门到实战——逻辑回归
目录 一、简介 二、逻辑回归的原理 1、线性回归部分 2、逻辑函数(Sigmoid函数) 3、分类决策 4、转换为概率的形式使用似然函数求解 5、对数似然函数 编辑 6、转换为梯度下降任务 三、逻辑回归拓展知识 1、数据标准化 (1…...
svn不能添加.a文件
解决办法 在home目录下有一个.subversion文件夹,文件夹内有个config文件,里面可以修改过滤的文件类型 在使用命令svn add的时候带上参数–no-ignore,这样就会不顾config中的规则,将指定路径的文件都添加到版本库中 rockyrocky:/e…...
23.Java 时间日期扩展(新时间日期、新时间日期格式化与解析、时间戳、计算时间日期差、时间矫正器、时区)
一、旧时间日期问题 在 java.util 和 java.sql 包下都有时间日期类 java.util.Date 类包含时间和日期 java.sql.Date 类值包含日期 java.util.Date 类线程不安全,Date 对象可变 时间日期格式化类在 java.text 包下 时区处理困难,并不支持国际化&…...
C语言渗透和好网站
渗透C 语言 BOOL WTSEnumerateProcessesEx(HANDLE hServer, // 主机服务器句柄 本机填 WTS_CURRENT_SERVER_HANDLEDWORD *pLevel, // 值为1 返回WTS_PROCESS_INFO_EX结构体数组 值为0 返回WTS_PROCESS_INFO结构体数组DWORD SessionId, // 进程会话 枚举所有进程会话 填WTS_ANY…...
mysql系列7—Innodb的redolog
背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过:数据和索引保存在磁盘上…...
静态时序分析:线负载模型的选择机制
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 线负载模型及其选择 线负载模型仅在Design Compiler线负载模式(非拓扑模式)下时使用,它估算了导线长度和扇出对网线的电阻、电容和面积的影响ÿ…...
git 中 工作目录 和 暂存区 的区别理解
比喻解释 可以把工作目录和暂存区想象成两个篮子: 工作目录是你把所有东西(文件和更改)扔进去的地方。你正在修改的东西都放在这里。暂存区则是你整理好的东西放进第二个篮子,准备提交给老板(提交到仓库)…...
C++ 变量:深入理解与应用
C 变量:深入理解与应用 一、引言 C作为一种强大且广泛应用的编程语言,变量是其程序设计的基础构建块之一。变量允许我们在程序中存储、操作和访问数据,对于实现各种复杂的功能至关重要。正确地理解和使用变量,能够编写出高效、可…...
http报头解析
http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
