python爬虫-爬虫常用函数及其用法-1

1、urllib库

urllib库是python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。

(1)urlopen函数

在 python3 的 urllib 库中,所有和网络请求相关的方法,都被集到 urllib.request 模块下面了.

urlopen 的函数基本的使用:

urlopen(url, data=None, timeout, proxies=None,context=None)

① url:请求的url。
② date:请求的 date,如果设置了这个值,那么将变成 post 请求。
③ 返回值:返回值是一个 http.cilent.HTTPResponse 对象,这个对象是一个类文件柄对象。有read(size)(按字节读取)、readline(读取第一行)、readlines(读取多行)以及 getcode(获取响应码)等方法。

④timeout:指定超时时间

readlines():适用于需要一次性读取整个文件内容,并且希望将每一行分别处理的场景。例如,处理文本文件时,如果文件不大,可以直接使用 readlines() 方法读取所有行,然后逐行处理。
readline():适用于需要逐行读取大文件的场景。由于每次只读取一行,因此占用内存较少,适合处理大文件。

在这里插入图片描述

使用举例

from urllib import request
resp = request.urlopen('http://www.baidu.com')
print(resp.read())   #读取相应数据

运行结果:

在这里插入图片描述在这里插入图片描述

实际上,使用浏览器访问百度,右键查看源代码,理论上应该是一样的。(但是实际上你会发现,跟我们刚才打印出来的数据不是一模一样的,由于请求包其他参数不同等原因,与实际还是有略微去区别的)。也就是说,上面的三行代码就已经帮我们把百度的首页的全部代码爬取下来了。

(2)urlretrieve函数:

这个函数可以方便的将网页上的一个文件保存到本地。

request.urlretrieve("网址","下载路径及网站名称(如果没有路径就是表示当前路径)")

以下代码可以非常方便的将百度的首页下载到本地:

from urllib import request
request.urlretrieve("http://www.baidu.com/","baidu.html")

在这里插入图片描述

下载图片

from urllib import request
request.urlretrieve("https://img2.baidu.com/it/u=1337068678,3064275007&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=750","1.jpg")

在这里插入图片描述

(3)urlencode函数:

用浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码。而如果使用代码发送请求,那么就必须手动的进行编码,这时候就应该使用urlencode函数来实现。urlencode 可以把字典数据转换为URL编码的数据。

示例代码如下:

from urllib import parse
data={'name':'爬虫基础','greet':'hello world','age':100}
qs=parse.urlencode(data)
print(qs)

在这里插入图片描述

实际应用:

①当进行百度搜索时,如果使用中文请求会报错,此时就需要对url进行编码:

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
reap=request.urlopen(url)
print(resp.read())

在这里插入图片描述

②对中文字符进行编码

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
print(qs)

在这里插入图片描述

③编码后可以正常访问

from urllib import parse
from urllib import request
url='https://www.baidu.com/s'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
url = url + '?'+ qs
reap=request.urlopen(url)
print(reap.read())

在这里插入图片描述

(4)parse-qs函数:

可以将经过编码后的url参数进行解码

from urllib import parse
from urllib import request
url='https://www.baidu.com/s?wd=迪丽热巴'
patams={"wd":"迪丽热巴"}
qs=parse.urlencode(patams)
print(qs)
print(parse.parse_qs(qs))

在这里插入图片描述

(5)urlparse和urlsplit:

有时候拿到一个url想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlparse 或者是urlsplit来进行分割。

urlparse‌:用于完整解析URL的各个部分,包括协议、域名、端口、路径、参数、查询和锚点

urlsplit‌:不包含参数(params)字段

区别

  • 参数处理‌:urlparse能够解析URL中的参数(params),而urlsplit则不包括参数字段。如果URL中包含参数,使用urlparse更为合适。
  • 返回对象类型‌:urlparse返回一个ParseResult对象,而urlsplit返回一个SplitResult对象。尽管两者在功能上有所重叠,但返回的对象类型不同,这在进行类型检查时需要注意。

适用场景

  • urlparse‌:当你需要完整解析URL的所有部分,包括参数时,使用urlparse
  • urlsplit‌:如果你不需要解析参数部分,或者更倾向于使用不包含参数的URL解析结果,可以使用urlsplit

urlparse‌使用:

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
print(parse.urlparse(url))

在这里插入图片描述

urlsplit‌的使用

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
print(parse.urlsplit(url))

在这里插入图片描述

获取单个属性:

from urllib import parse
url = "https://www.example.com/path;type=docx?query=value#fragment"
a= parse.urlsplit(url)
print("Scheme:", a.scheme)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue3 路由守卫

在Vue 3中,路由守卫是一种控制和管理路由跳转的机制。它允许你在执行导航前后进行一些逻辑处理,比如权限验证、数据预取等,从而增强应用的安全性和效率。路由守卫分为几种不同的类型,每种类型的守卫都有其特定的应用场景。 其实路…

web——sqliabs靶场——第八关——sqlmap的使用

第八关还是用到了盲注,我们来使用kali里的sqlmap工具来搞一下。 1.sqlmap简介 sqlmap 是一款开源的自动化 SQL 注入和数据库接管工具,旨在帮助安全研究人员和渗透测试人员检测和利用 SQL 注入漏洞。它支持多种数据库管理系统(如 MySQL、Post…

如何去掉el-input 中 type=“number“两侧的上下按键

<el-input v-model.trim"row.length" type"number" min"0" placeholder""></el-input> // 如何去掉el-input-number两侧的上下按键 ::v-deep input::-webkit-outer-spin-button, ::v-deep input::-webkit-inner-spin-butt…

【Redis】redis缓存击穿,缓存雪崩,缓存穿透

一、什么是缓存&#xff1f; 缓存就是与数据交互中的缓冲区&#xff0c;它一般存储在内存中且读写效率高&#xff0c;提高响应时间提高并发性能&#xff0c;如果访问数据的话可以先访问缓存&#xff0c;避免数据查询直接操作数据库&#xff0c;造成后端压力过大。 但是可能会面…

统⼀数据返回格式快速⼊⻔

为什么会有统⼀数据返回&#xff1f; 其实统一数据返回是运用了AOP&#xff08;对某一类事情的集中处理&#xff09;的思维。 优点&#xff1a; 1.⽅便前端程序员更好的接收和解析后端数据接⼝返回的数据。 2.降低前端程序员和后端程序员的沟通成本&#xff0c;因为所有接⼝都…

第7章硬件测试-7.6 量产可靠性测试

7.6 量产可靠性测试 7.6.1 生产小批量测试7.6.2 装备测试7.6.3 器件一致性测试7.6.4 工艺规程和单板维修技术说明 产品量产阶段需要通过可靠性测试来保障产品的可靠性。 7.6.1 生产小批量测试 生产小批量测试是发货之前的批量压力测试&#xff0c;有两个目的&#xff1a;一是…

可编辑的 SALV 模型(克服 SALV 模型的限制)

我们都知道 ABAP Object 比传统的 ABAP 非常强大。在这里&#xff0c;我想分享我使用 ABAP 对象克服 SALV mdoel 限制的最佳实验之一。 起源 最初&#xff0c;我在 SCN 上发布了这篇文章 – ABAP 对象的强大功能&#xff1a;克服 SALV 模型的限制&#xff0c;它也受到了很多批…

通过shell脚本分析部署nginx网络服务(详细易懂)

通过shell脚本分析部署nginx网络服务 要求&#xff1a; 接收用户部署的服务名称判断服务是否安装 已安装&#xff1b;自定义网站配置路径为/www&#xff1b;并创建共享目录和网页文件&#xff1b;重启服务 没有安装&#xff1b;安装对应的软件包测试&#xff1a; 判断服务是否…

H.265流媒体播放器EasyPlayer.js H5流媒体播放器如何验证视频播放是否走硬解

随着技术的不断进步和5G网络的推广&#xff0c;中国流媒体播放器行业市场规模以及未来发展趋势都将持续保持稳定的增长&#xff0c;并将在未来几年迎来新的发展机遇。流媒体播放器将继续作为连接内容创作者和观众的重要桥梁&#xff0c;推动数字媒体产业的创新和发展。 EasyPla…

【 LVGL】用外部FLASH存储字库并显示

LVGL–用外部FLASH存储字库并显示 应用场景 由于使用的芯片内部FLASH空间有限&#xff0c;如果仅使用英文字库并用不了多少空间&#xff0c;但是项目需要支持中英文字库&#xff0c;中文字库添加2w字左右&#xff0c;10px大小就要1M多了&#xff0c;内部空间根本不够用&#…

含284个数据集,覆盖18项临床任务,上海AI Lab等发布多模态医疗基准GMAI-MMBench

「有这样一台智能医疗设备&#xff0c;患者只需躺在智能医疗设备上便可完成从扫描、诊断、治疗、修复的全过程&#xff0c;实现健康的重启」。这是 2013 年上映的科幻电影「极乐空间」中的一个情节。 电影《极乐空间》场景 如今&#xff0c;随着人工智能技术的飞速发展&#xf…

Java-04

目录 Redis如何实现延时队列 延时队列的组成 生产消息 消费消息 实现细节 Redis集群 Integer.compare(a[1], b[1]))与a[1] - b[1]) 设计模式​编辑 算法 Redis如何实现延时队列 使用 sortedset &#xff0c;拿时间戳作为 score &#xff0c;消息内容作为 key 调用 zad…

【C++】— 掌握STL vector 类:“Vector简介:动态数组的高效应用”

文章目录 1.vector的介绍和使用1.1vector的介绍1.2 vector的特点1.3vector的使用1.3.1vector的定义1.3.2vector iterator的使用1.3.3vector 的空间增长问题1.3.4 vector 的增删查改1.3.5vector 迭代器失效问题 1.vector的介绍和使用 1.1vector的介绍 vector是一个顺序容器&am…

CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow

简介&#xff1a; 1.伸缩盒模型简介 2.伸缩容器、伸缩项目 3-4.主轴方向 5.主轴换行方式 6.复合属性flex-flow 7.主轴的对齐方式

互联网数字化商品管理浪潮思考:从信息化到精准运营

目录 一、商品数字化转型面临的现状分析 &#xff08;一&#xff09;运营方向分析 &#xff08;二&#xff09;商品归类分析 二、商品数字化管理建设分析 三、基础建设——商品信息数字化 &#xff08;一&#xff09;商品信息质量数字化的目的 &#xff08;二&#xff0…

STL关联式容器之RB-tree(红黑树)

AVL-tree之外&#xff0c;另一个颇具历史并被广泛运用的平衡二叉搜索树是RB-tree&#xff08;红黑树&#xff09;。所谓RB-tree&#xff0c;不仅是一颗二叉搜索树&#xff0c;而且必须满足一下规则&#xff1a; 1&#xff1a;每个节点不是红色就是黑色 2&#xff1a;根节点为…

电脑系统重装小白教程

​对于很多电脑用户来说&#xff0c;系统出现故障或者需要清理时&#xff0c;重装系统是一项不可避免的操作。但是&#xff0c;对于没有技术基础的小白用户而言&#xff0c;重装系统可能会显得复杂且困难。本文将为您提供一份简洁易懂的电脑系统重装教程&#xff0c;帮助您顺利…

使用Ollama和Open WebUI管理本地开源大模型

Open WebUI和Ollama介绍 Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面&#xff08;WebUI&#xff09;&#xff0c;它被设计用于与大型语言模型&#xff08;LLMs&#xff09;进行交互&#xff0c;特别是那些由 Ollama 或与 OpenAI API 兼容的服务所支持的模型。O…

Nmap识别MongoDB 6.0指纹

Nmap识别MongoDB 6.0指纹 朋友反馈一个问题&#xff0c;说使用Nmap扫描MongoDB服务时对于6.0以上的版本默认无法识别到服务版本信息。 如上图所示&#xff0c;对应的VERSION信息是空的&#xff0c;在提示信息中可以看到&#xff0c;官方推荐将指纹信息上传以帮助更新服务指纹&…

向量搜索工具之 Milvus vs. Elastic

在当今数据驱动的世界中&#xff0c;向量数据库因其在处理大规模非结构化数据方面的卓越能力而变得越来越重要。随着数据量的爆炸性增长&#xff0c;如何确保这些数据库在存储和检索数十亿数据点时仍能保持高性能&#xff0c;成为了一个关键挑战。 Milvus和Elasticsearch都是管…