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…

Python 爬虫

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

idea项目导入gitee 码云

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

基于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…

WebP Vs. PNG:哪种图像格式适合您的网站?

图像对任何网站都至关重要,可以增强视觉吸引力和用户体验。但是,图像也会显着影响网站的加载时间,因此必须针对 Web 使用对其进行优化。一种方法是使用正确的图像格式。

mysql乱码、mysql数据中文问号

网上排出此错误方法的很多&#xff0c;但是 都不简洁&#xff0c;找不到根本原因 主要排查两点&#xff1a; 1.代码中jdbc链接的编码规则 urljdbc:mysql://localhost:3306/title?useUnicodetrue&amp;characterEncodingutf8 将characterEncoding设置为utf8 2.设置mysq…

INT303 Big Data Analytics 笔记

Lecture1 Introduction 不考&#xff01; “Data Mining is the study of collecting, processing, analyzing, and gaining useful insights from data” EXPLORATORY ANALYSIS Make measurements to understand what the data looks like first steps when collecting da…

Unity3D仿星露谷物语开发12之创建道具列表

1、目标 道具是游戏的核心部分&#xff0c;道具包括你可以拾取的东西&#xff0c;你可以使用的工具和你能种的东西等。 本节就是创建道具的信息类。同时了解ScriptableObject类的使用。 2、创建道具枚举类 修改Assets -> Scripts -> Enums.cs脚本&#xff0c; 新增如…

如何修复 WordPress 中的“Error establishing a database connection”问题

如何修复 WordPress 中的“Error establishing a database connection”问题 在使用 WordPress 建站时&#xff0c;如果你看到“Error establishing a database connection”的提示&#xff0c;不要慌张。这通常意味着网站无法连接到数据库&#xff0c;因此无法显示内容。下面…