urllib之urlopen和urlretrieve的headers传入以及parse、urlparse、urlsplit的使用

article/2025/9/30 11:30:27

urllib库是什么?

urllib库python的一个最基本的网络请求库,不需要安装任何依赖库就可以导入使用。它可以模拟浏览器想目标服务器发起请求,并可以保存服务器返回的数据。

urllib库的使用:

1、request.urlopen

(1)只能传入url的方式

from http.client import HTTPResponse
from urllib import request
from urllib.request import Requesturl = "https://www.baidu.com"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}response = request.urlopen(url) # type: HTTPResponseprint(response.read().decode("utf-8"))

(2) 传入Request对象和headers的方式

from http.client import HTTPResponse
from urllib import request
from urllib.request import Requesturl = "https://www.baidu.com"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}req = Request(url, headers=headers)response = request.urlopen(req)  # type: HTTPResponseprint(response.read().decode("utf-8"))

2、request.urlretrieve

(1)简单使用,不能传入headers,只能传入url和保存的路径的方式

from http.client import HTTPResponse
from urllib import request
from urllib.request import Requesturl = "https://www.baidu.com"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}# req = Request(url, headers=headers)
#
# response = request.urlopen(req)  # type: HTTPResponse
#
# print(response.read().decode("utf-8"))request.urlretrieve(url, "baidu.html")

(2)复杂使用,可以传入headers,传入url和保存的路径的方式

from urllib import requesturl = "https://www.baidu.com"
opener = request.build_opener()
opener.addheaders = ([("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36")])request.install_opener(opener)request.urlretrieve(url, "baidu.html")

额外的信息:

1、response的content-length

from http.client import HTTPResponse
from urllib import request
from urllib.request import Requesturl = "https://www.kuwo.cn/comment?type=get_comment&f=web&page=1&rows=5&digest=2&sid=93&uid=0&prod=newWeb&httpsStatus=1"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}req = Request(url, headers=headers)
response = request.urlopen(req)  # type: HTTPResponsemeta = response.info()
# content-type
print(meta.get_content_type())
# content_charset
print(meta.get_content_charset())
# Content-Length
print(meta.get_all("Content-Length"))
print(response.getheader("Content-Length"))

urllib之parse模块的使用:

编码和解码

from urllib import parsedata = {"name": "王五","age": 31,"sex": "男","address": "北京市昌平区"
}# 参数编码
qs = parse.urlencode(data)
print(qs)# 解码
my_data = parse.parse_qs(qs)
print(my_data)

quote

起因:

在请求的url中,如果有汉字、空格或者特殊字符的时候,浏览器默认会将该字符进行urlencode()的处理,这样就可以正常的访问了!!!

代码实现:

错误代码:
from http.client import HTTPResponse
from urllib import parse, request
from urllib.request import Requesturl = "https://www.baidu.com/s?wd=%E6%9D%8E%E4%B8%80%E6%A1%90"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
req = Request(url, headers=headers)
response = request.urlopen(req)  # type: HTTPResponse
# print(response.read().decode("utf-8"))url = "https://www.baidu.com/s?wd=李一桐"
req = Request(url, headers=headers)
response = request.urlopen(req)  # type: HTTPResponse
print(response.read().decode("utf-8"))
正确的代码:
from http.client import HTTPResponse
from urllib import parse, request
from urllib.request import Requesturl = "https://www.baidu.com/s?wd=%E6%9D%8E%E4%B8%80%E6%A1%90"headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}
req = Request(url, headers=headers)
response = request.urlopen(req)  # type: HTTPResponse
# print(response.read().decode("utf-8"))url = "https://www.baidu.com/s?wd="
url = url + parse.quote("李一桐")
req = Request(url, headers=headers)
response = request.urlopen(req)  # type: HTTPResponse
print(response.read().decode("utf-8"))

urlparse、urlsplit的使用:

from urllib import parseurl = "https://www.baidu.com/login/title?id=123456&wd=hello#nav"
result = parse.urlparse(url)
print(result)
print("*" * 140)
print(result.scheme)
print(result.netloc)
print(result.path)
print(result.params)
print(result.fragment)
print(result.hostname)
print(result.port)print("*" * 140)result = parse.urlsplit(url)
print(result.scheme)
print(result.netloc)
print(result.path)
print(result.fragment)
print(result.hostname)
print(result.port)


http://chatgpt.dhexx.cn/article/8yf5QO1V.shtml

相关文章

python urlparse()方法

该方法实现url的识别和分段,这里先用一个实例来看一下 from urllib.parse import urlparseresulturlparse(http://www.baidu.com/index.html;user?id5#comment) print(type(result),result) 这里我们用urlparse()方法进行了URL的解析,首先&#xff0c…

python爬虫之urllib.parse详解

Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数。 urlunparse() 通过长度为6的可迭代对象,组建URL urlunsplit() 通过长度为5的可迭代对象,组建URL urljoin() 将两个链接参数拼接为完整URL urlencode() 将字典转换为请求参数 parse_qs(…

Python中Urlparse模块

Urlparse这个第三方模块中包含的函数有urljoin、urlsplit、urlunsplit、urlparse等。 1.urlparse.urlparse(urlstring[, scheme[, allow_fragments]]) urlparse将urlstring解析成6个部分,它从urlstring中取得URL,并返回元组 (scheme, netloc, path, pa…

[240]python的urllib.parse库解析URL

Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数。 解析url urlparse() 函数可以将 URL 解析成 ParseResult 对象。对象中包含了六个元素,分别为: 协议(scheme) 域名(netloc) 路径&#x…

Python之urllib爬虫-request模块和parse模块详解

文章目录 urllibrequest模块访问URLRequest类其他类 parse模块解析URL转义URL robots.txt文件 urllib urllib是Python中用来处理URL的工具包,源码位于/Lib/下。它包含了几个模块:用于打开及读写的urls的request模块、由request模块引起异常的error模块、…

url.parse() 的替换方法new URL(),URl.parse()的使用。

URl.parse()的解析使用 对于这种表单提交的的请求路径,由于其中具有用户动态填写的内容所以不能通过完整的URL路径来处理这个请求对于我们来讲,只需要判定,请求路径是/……?之前就行 var myurl require(url); var obj myurl.p…

Python之urlparse模块

一、简介 urlparse库用于把url解析为各个组件,支持file,ftp,http,https, imap, mailto, mms, news, nntp, prospero, rsync, rtsp, rtspu, sftp, shttp, sip, sips, snews, svn, svnssh, telnet等几乎所有的形式。根据其官网的说明,在Python3.0中&#x…

Python模块:urlparse模块(操作url)

文章目录 一、介绍二、功能介绍1.urlparse.urlparse2.urlparse.urlsplit3.urlparse.urljoin 一、介绍 官方文档 :http://docs.python.org/library/urlparse.html作用:urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接注意&…

基于FPGA的人脸识别

基于FPGA的人脸识别 一.理论基础 1.基本介绍 模块框图: 在上一篇文章里,已经实现了基于OV5640的摄像头监控,在此基础上,我们加入一些图像处理的内容,即可实现简单的一些图像处理效果,这次做到的就是最…

facenet 人脸识别原理理解(三)

在前两篇文章已经介绍了facenet人脸识别代码的使用和具体操作,但相关的原理还是没有说,这篇文章进行简单的讲解一下。 1. 原理 在人脸识别中,当我们需要加在图片数据库入新的一张人脸图片时,是怎么做到识别的呢,难道…

人脸识别mtcnn原理

人脸检测,也就是在图片中找到人脸的位置。输入是一张可能含有人脸的图片,输出是人脸位置的矩形框。 人脸对齐。原始图片中人脸的姿态、位置可能有较大的区别,为了之后统一处理,要把人脸“摆正”。为此,需要检测人脸中…

dlib中的人脸识别原理

这里讨论的是人脸识别,不是人脸检测 dlib中是先检测都人脸,然后把人脸通过Resnet生成一个128维的向量,Resnet有几种不同深度的结构(图片来自https://raw.githubusercontent.com/raghakot/keras-resnet/master/images/architecture.png) dlib…

计算机识别人脸原理,深入浅出人脸识别原理

编辑推荐: 本文主要介绍了人脸识别流程,如何提取面部训练数据进行识别以及人脸检测和人脸识别,它们应用场景有哪些,希望对您的学习又所帮助。 本文来自于csdn,由火龙果软件Alice编辑、推荐。 前不久Iphone X发布,革命性的取消了TouchID(指纹识别),而添加了更酷的 FaceID(…

基于html5鼠标悬停图片动画展示效果

分享一款基于html5鼠标悬停图片动画展示效果。里面包含两款不同效果的html5图片展示效果。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div class"wrap" id"wrap"><div style"float: left; padding-top…

组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs

组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs 背景 近期正在探索前端、后端、系统端各类常用组件与工具&#xff0c;对其一些常见的组件进行再次整理一下&#xff0c;形成标准化组件专题&#xff0c;后续该专题将包含各类语言中的一些常用组件。欢迎大…

代理神器Charles4.2.8的破解

打开Charles&#xff0c;点击工具栏的Help&#xff0c;选择Register Charles&#xff0c;在两栏里分别输入即可。 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4

TLS加密套件

出于兴趣爱好&#xff0c;决定开发TLS1.2-1.3的一个库。为此阅读了TLS相关的若干RFC文档&#xff0c;以及查阅了多篇相关博客文章。最终有以下发现&#xff1a; 1. TLS定义了几百个加密套件(参考https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml)&#x…

sshd服务及防暴力破解 附赠防暴力破解脚本

利用yum源安装sshd服务客户端安装&#xff1a;openssh-clients.x86_64 服务端安装&#xff1a;openssh-server.x86_64Openssh和sshd有区别吗&#xff1f; 两个是不同的概念&#xff0c;软件包名称叫openshh 开机的服务叫sshd[rootserver1 ~]# rpm -ql openssh ###查看安装的…

The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

最近在部署项目的时候遇到一个问题&#xff0c;卡了整整一天时间&#xff0c;所以感觉有必要po个解决方法出来给有需要的朋友参考一下。 问题描述&#xff1a;Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted b…

TLS 1.3 协议详解

TLS 1.3 握手流程详解 我的TLS实现&#xff08;支持TLS1.3和国密SSL&#xff09;&#xff0c;大家可以学习参考&#xff1a;https://github.com/mrpre/atls/ 如果觉得有用&#xff0c;请打赏N元&#xff1a;http://39.98.242.44 需要的背景知识&#xff1a; &#xff08;1&am…