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()方法取得访问的网页,打印出响应的状态与网页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot教程之四十一:在 Spring Boot 中调用或使用外部 API

如何在 Spring Boot 中调用或使用外部 API&#xff1f; Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。它现在越来越受到开发人员的青睐&#xff0c;因为它是一个快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置…

HTML5实现好看的新年春节元旦网站源码

HTML5实现好看的新年春节元旦网站源码 前言一、设计来源1.1 主界面1.2 新年由来界面1.3 文章详细界面1.4 登录界面1.5 注册界面1.6 新年图册界面1.7 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的新年春节元旦网站源码&#xff0c;春节新…

Python学习(5):数据结构

1 列表 1.1 列表方法 列表数据类型支持很多方法&#xff0c;列表对象的所有方法所示如下&#xff1a; list.append(x)&#xff1a;在列表末尾添加一项。 类似于 a[len(a):] [x]。list.extend(iterable)&#xff1a;通过添加来自 iterable 的所有项来扩展列表。 类似于 a[len…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

2024年RAG:回顾与展望

2024年&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术经历了从狂热到理性的蜕变&#xff0c;成为大模型应用领域不可忽视的关键力量。年初&#xff0c;AI的“无所不能”让市场充满乐观情绪&#xff0c;RAG被视为解决复杂问题的万能钥匙&#xff1…

《量子AI:突破量子比特稳定性与容错性的关键瓶颈》

在量子计算的发展进程中&#xff0c;量子比特的稳定性和容错性问题一直是阻碍其走向广泛应用的关键障碍。量子AI作为前沿技术&#xff0c;正积极探索各种途径来攻克这些难题。 量子纠错&#xff1a;守护量子比特的精准防线 量子纠错是解决量子比特稳定性和容错性问题的核心技…

Python 爬虫

一、创建项目 1.双击打开pycharm&#xff0c;点击新建项目 2.项目设置- 勾选[继承全局站点软件包]- 勾选[可用于所有项目]- 取消勾选[创建main.py欢迎脚本]- 点击创建 3.项目名称右键--新建--python文件 4.输入文件名--回车二、编辑代码 # 导入请求模块 import requests # 如…

【信息系统项目管理师】高分论文:论信息系统项目的沟通管理(银行绩效考核系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划沟通管理2、管理沟通3、监督沟通论文 2022年3月,我参加了XX省商业银行绩效考核系统项目的建设,担任了项目经理的角色,该项目投资共100万元人民币,建设工期为一年。通过该项目的建设实现了从多角…

【环境配置】Jupyter Notebook切换虚拟环境

在Jupyter Notebook中是可以切换虚拟环境的&#xff0c;以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用nb_conda_kernels扩展&#xff08;适用于Anaconda环境&#xff09; 安装 如果你使用的是Anaconda环境&#xff0c;首先确保你已经安装了 nb_conda 包。如果没…

idea项目导入gitee 码云

1、安装gitee插件 IDEA 码云插件已由 gitosc 更名为 gitee。 1 在码云平台帮助文档http://git.mydoc.io/?t153739上介绍的很清楚&#xff0c;推荐前两种方法&#xff0c; 搜索码云插件的时候记得名字是gitee&#xff0c;gitosc已经搜不到了。 2、使用码云托管项目 如果之…

云计算在医疗行业的应用

云计算在医疗行业的应用广泛而深入&#xff0c;为医疗服务带来了前所未有的变革。以下是对云计算在医疗行业应用的详细解析&#xff1a; ### 一、医疗数据共享与整合 云计算平台具有强大的数据存储和处理能力&#xff0c;使得医疗数据共享与整合成为可能。通过云计算平台&…

基于JAVA+SpringBoot+Vue的机动车号牌管理系统

基于JAVASpringBootVue的机动车号牌管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; …

活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识

课程介绍 参加“Azure 在线技术公开课&#xff1a;基础知识”活动&#xff0c;培养有助于创造新的技术可能性的技能并探索基础云概念。参加我们举办的本次免费培训活动&#xff0c;扩充自身的云模型和云服务类型知识。你还可以查看以计算、网络和存储为核心的 Azure 服务。 活…

郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现

0x01 产品简介 郑州时空-TMS运输管理系统是一款专为物流运输企业设计的综合性管理软件,旨在提高运输效率、降低运输成本,并实现供应链的协同运作。系统基于现代计算机技术和物流管理方法,结合了郑州时空公司的专业经验和技术优势,为物流运输企业提供了一套高效、智能的运输…

当下热点系列 篇二:大消费题材解析和股票梳理

文章目录 系列文章题材解析食品饮料白酒与酒类乳制品及奶酪生活用纸调味品及腌制食品酵母及生物制品现场演艺及文化旅游股票梳理系列文章 当下热点系列 篇一:首发经济题材解析和股票梳理 题材解析 食品饮料 概念概览:涵盖日常饮食中的各类饮品和加工食品,包括能量饮料、植…

BUUCTF Pwn ciscn_2019_es_2 WP

1.下载 checksec 用IDA32打开 定位main函数 发现了个假的后门函数&#xff1a; 看看vul函数&#xff1a; 使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造 所以使用栈迁移&#xff1a; 栈迁移需要用到leave ret 使用ROPgadget找地址&#xff1a; …

07-ArcGIS For JavaScript--隐藏参数qualitySettings(memory和lod控制)

目录 1、综述2、sceneview.qualitySettings2.1、sceneview.qualitySettings.memoryLimit2.2、lodFactor2.3 additionalCacheMemory 3、结论 1、综述 先上重点&#xff0c;SceneView.qualitySettings为隐藏对象参数&#xff0c;该对象的memoryLimit和lodFactor等值&#xff0c;…

【SQL Server】教材数据库(1)

1 利用sql建立教材数据库&#xff0c;并定义以下基本表&#xff1a; 学生&#xff08;学号&#xff0c;年龄&#xff0c;性别&#xff0c;系名&#xff09; 教材&#xff08;编号&#xff0c;书名&#xff0c;出版社编号&#xff0c;价格&#xff09; 订购&#xff08;学号…

RP2040 C SDK I2C外设使用

RP2040 C SDK I2C外设使用 &#x1f4cc;相关篇《RP2040 VSCode C/C开发环境快速部署》&#x1f4cd;I2C API 外设&#xff1a;https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#group_hardware_i2c&#x1f527;驱动I2C ssd1306 屏幕需要使用到的库&#xf…

模仿微信小程序wx.showModal自定义弹窗,内容可以修改

实现以下弹框样式功能 1.在components新建一个文件showModel.wpy作为组件&#xff0c;复制下面代码 <style lang"less" scoped> .bg_model {display: flex;justify-content: center;align-items: center;// 弹框背景.bg_hui {width: 100%;height: 100%;posi…