当前位置: 首页 > news >正文

Python从入门到网络爬虫(模块详解)

模块

我们知道,函数和类都是可以重复调用的代码块。在程序中使用位于不同文件的代码块的方法是:导入 (import) 该对象所在的模块 (mudule)。当程序变得越来越大时,将程序的不同部分根据不同分类方法保存在不同文件中通常会更加方便。

导入模块

Python 模块允许我们方便地使用多个文件中的代码来构建程序。模块就是一个包含 Python 定义和语句的 .py 文件。

例如我们创建一个 hello_world.py 文件,就可以理解为创建了一个名为 hello_world 的模块:

# hello_world.py
def print_hello():print('Hello World!')class Triangle:def __init__(self, edge_1, edge_2, edge_3):self.edge_1 = edge_1self.edge_2 = edge_2self.edge_3 = edge_3def __str__(self):return str((self.edge_1, self.edge_2, self.edge_3))def print_info(self):print('The three sides of a triangle are {}, {} and {}'.format(self.edge_1, self.edge_2, self.edge_3))def perimeter(self):return self.edge_1 + self.edge_2 + self.edge_3

可将模块视为扩展,要导入模块,需要使用关键字 import,导入模块的一般格式如下:

import module_1[, module_2....]  # 可以同时导入多个模块

import module_1[, module_2....] # 可以同时导入多个模块

例如在 test.py 文件要导入 hello_world 模块:

import hello_world

导入的模块只要说明模块名即可,不需要也不能带有文件扩展名 .py。如果要使用模块中的对象,如函数、类等,需要用使用句点运算符 (.),即使用“模块名.对象”进行访问。例如,使用 hello_worl.Triangle 访问模块 hello_world 中的类 Triangle

# test_1.py import hello_world hello_world.print_hello() tri_a = hello_world.Triangle(3, 4, 5) print(tri_a)

程序输出如下所示:

Hello World! (3, 4, 5)

需要注意的是,导入的模块要位于相同的目录层次下,否则需要添加目录结构,例如,如果 hello_world 位于子目录 module 下,则需要使用如下方式:

# test_2.py import module.hello_world module.test.print_hello()

程序输出如下所示:

Hello World!

导入Python标准模块

Python 提供了许多标准模块,这些模块文件位于 Python 安装目录的 lib 文件夹中。可以像导入自己编写的模块一样导入标准模块,例如导入 math 模块,使用其中的对象:

# test_3.py import math print('sqrt(4) = ', math.sqrt(4)) print('sin(π/6) = ', math.sin(math.pi /6))

程序输出如下所示:

sqrt(4) = 2.0 sin(π/6) = 0.49999999999999994

这里可能大家会有一个疑问,这里导入的模块和当前文件并不在同一目录下,为什么不需要使用模块路径?这个问题也可以转换为——当我们使用 import 语句的时候,Python 解释器是怎样找到对应的文件的呢?

这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。搜索路径被存储在 sys 模块中的 path 变量中:

>>> import sys >>> sys.path ['', 'D:\\Program Files\\Python39\\python39.zip', 'D:\\Program Files\\Python39\\DLLs', 'D:\\Program Files\\Python39\\lib', 'D:\\Program Files\\Python39', 'D:\\Program Files\\Python39\\lib\\site-packages'

单独导入模块中所需对象

我们可能不想每次调用模块中的对象时都指定模块名,这时,我们可以使用 from module import object,从模块中单独导入所需对象,同时使用这个单独导入的对象时就不需要在前面添加“模块名.”前缀了:

# test_4.py from math import pi, sin print('sqrt(4) = ', sqrt(4)) print('sin(π/6) = ', sin(math.pi /6))

导入模块中的所有对象

可以通过 from module import * 导入模块中的所有对象,同样不再需要模块名前缀:

# test_5.py from math import * print('sqrt(4) = ', sqrt(4)) print('sin(π/6) = ', sin(math.pi /6))

不同程序代码中不可避免地可能会使用了同一个名字来命名不同对象,这时就会引起冲突,但如果这些名字属于不同的模块,就可以通过模块名来区分它们,因此为了避免名字冲突,应尽量避免使用 from module import objectfrom module import * 导入对象。

重命名导入模块或对象

另一种避免名字冲突的方法是重命名导入模块或对象:

# test_6.py import math as m from datetime import date as d print(d.today()) print('sqrt(4) = ', m.sqrt(4)) print('sin(π/6) = ', m.sin(math.pi /6))

程序输出如下所示:

datetime.date(2021, 12, 3) sqrt(4) = 2.0 sin(π/6) = 0.49999999999999994

可以看到附加的好处是可以使用简写,减少编码工作量。

导入第三方模块

除了标准库外,Python 也具有规模庞大的第三方库,覆盖了信息技术几乎所有领域,这也是 Python 的其中一个巨大优势。下面以常用可视化库 matplotlib 为例介绍第三方库的使用。和标准库不同,使用第三方库首先要进行安装,在 shell 命令中使用 pip 命令可以快速安装所需库:

pip install matplotlib

安装完成后,使用第三方库就和标准库没有任何差别了:

# cos_1.py
import math
from matplotlib import pyplot as plt
scale = range(100)
x = [(2 * math.pi * i) / len(scale) for i in scale]
y = [math.cos(i) for i in x]
plt.plot(x, y)
plt.show()

相关文章:

Python从入门到网络爬虫(模块详解)

模块 我们知道,函数和类都是可以重复调用的代码块。在程序中使用位于不同文件的代码块的方法是:导入 (import) 该对象所在的模块 (mudule)。当程序变得越来越大时,将程序的不同部分根据不同分类方法保存在不同文件中通常会更加方便。 导入模…...

[大厂实践] 无停机迁移大规模关键流量(下)

在系统升级、迁移的过程中,如何验证系统逻辑、性能正确无误,是一个很大的挑战。这一系列介绍了Netflix通过重放流量测试解决这一挑战的实践。原文: Migrating Critical Traffic At Scale with No Downtime — Part 2 想象一下,你被心爱的Netf…...

VMware Workstation虚拟机CentOS 7.9 配置固定ip的步骤

VMware Workstation虚拟机CentOS7.9配置固定ip的步骤 编辑虚拟机 打开VMware Workstation。 选择要配置的虚拟机,但不要启动它。 点击“编辑虚拟机设置”(Edit virtual machine settings)。 选择“网络适配器”(Network Adapter&…...

构建自己的私人GPT

创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 一、本地部署…...

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示

EtherCAT主站SOEM -- 14 --Qt-Soem通过界面采集从站IO进行显示 一 mainwindow.c 文件函数:1.1 自定义PDO配置1.2 主站初始化二 motrorcontrol.c 文件三 allvalue.h 文件该文档修改记录:总结一 mainwindow.c 文件函数: 1.1 自定义PDO配置 int IO_setup(uint16 slave) {int...

线程安全、共享变量的可见性

Java中的线程安全问题 谈到线程安全问题,我们先说说什么是共享资源。所谓共享资源,就是说该资源被多个线程所持有或者说多个线程都可以去访问该资源。 线程安全问题是指当多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数…...

电动汽车BMS PCB制板的技术分析与可制造性设计

随着电动汽车行业的迅猛发展,各大厂商纷纷投入巨资进行技术研发和创新。电动汽车的核心之一在于其电池管理系统(Battery Management System, BMS),而BMS的心脏则是其印刷电路板(PCB)。通过这篇文章探讨电动…...

Android 车联网——多屏多用户(十五)

前面几篇文章介绍了多用户和多屏相关的 Manager 和 Service。上一篇文章最后虽然车内乘员都根据配置有自己的对应屏幕,但默认情况下,所有车内乘员依然使用的是当前主用户(司机用户),这一篇我们继续放下看一下用户的创建与分配。 一、用户创建分配 1、创建用户 对于创建用…...

uwsgitop 使用

背景:Django项目 uwsgi,uwsgi.ini 在工程下。 使用: 下载安装uwsgitop [roothost ~]# tar -zxvf uwsgitop-0.11.tar.gz [rootuwsgitop-0.11 ~]# cd uwsgitop-0.11/ [rootuwsgitop-0.11 ~]# python setup.py install [rootuwsgitop-0.11 …...

深信服技术认证“SCSA-S”划重点:文件包含漏洞

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…...

Color Control

设计一个优秀的用户界面是一项艰巨的任务。特别是如果你想改变UI的颜色,调整所有元素可能需要花费大量时间。Color Control可以帮助你!在检查器中以可视化的方式将你的项目颜色定义为资源。Color Control为你提供了组件,当你编辑它们时,它们会自动更新你的UI元素。 颜色控制…...

端口开放问题

端口开放问题 所遇问题 在宿主主机上可以ping通虚拟机ip192.168.27.129,但无法在宿主主机上访问http://192.168.27.129:8080navavcat 16连接mysql时,2002 - Can’t connect to server on ‘192.168.27.129’(100601) 原因 以上两个问题&a…...

KNN 回归

K 近邻回归(K-Nearest Neighbors Regression)是一种基于实例的回归算法,用于预测连续数值型的输出变量。它的基本思想是通过找到与给定测试样本最近的 K 个训练样本,并使用它们的输出值来预测测试样本的输出。它与 K 最近邻分类类…...

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i,进入编辑模式 6、把用户的ID改成跟r…...

听GPT 讲Rust源代码--compiler(28)

File: rust/compiler/rustc_codegen_llvm/src/llvm/mod.rs 文件rust/compiler/rustc_codegen_llvm/src/llvm/mod.rs是Rust编译器的LLVM代码生成模块的一个文件。该文件定义了一些用于与LLVM交互的结构体、枚举和常量。 此文件的主要作用是: 定义编译器和LLVM之间的接…...

Debezium日常分享系列之:Debezium2.5版本之connector for JDBC

Debezium日常分享系列之:Debezium2.5版本之connector for JDBC 一、概述二、JDBC 连接器的工作原理三、使用复杂的 Debezium 变更事件四、至少一次交付五、多项任务六、数据和列类型映射七、主键处理八、删除模式九、幂等写入十、Schema evolution十一、引用和区分大…...

爬虫网易易盾滑块案例:某乎

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址,浏览器打开网站&#xff0…...

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…...

【HTML5】第1章 HTML5入门

学习目标 了解网页基本概念,能够说出网页的构成以及网页相关名词的含义 熟悉Web标准,能够归纳Web标准的构成。 了解浏览器,能够说出各主流浏览器的特点。 了解HTML5技术,能够知道HTML5发展历程、优势以及浏览器对HTML5的支持情…...

dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib

更新Xcode14后低版本iPhone调试报错 dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /var/containers/Bundle/Application/…/….app/… Reason: image not found 这是缺少libswiftCoreGraphics库 直接导入libswiftCoreGraphics库即…...

React Hooks中useState的介绍,并封装为useSetState函数的使用

useState 允许我们定义状态变量,并确保当这些状态变量的值发生变化时,页面会重新渲染。 useState 返回值 const [state, setState] useState(initialState);useState 返回一个长度为 2 的数组。通常,我们这样定义状态变量: co…...

5 个最适合SEI 网络空投交易等操作的钱包(Bitget Wallet,Coin98等)

大家好!Sei 网络比 SOL 快 5 倍,手续费低,还能防止前台交易。好了,我不会占用大家太多时间,让我们直奔主题吧。 Sei 官方:推特(twitter.com/SeiNetwork) 如上图所示,目前…...

.net8 AOT编绎-跨平台调用C#类库的新方法-函数导出

VB.NET AOT无法编绎DLL,微软的无能,正是你的机会 .net8 AOT编绎-跨平台调用C#类库的新方法-函数导出 1,C#命令行创建工程:dotnet new classlib -o CSharpDllExport 2,编写一个静态方法,并且为它打上UnmanagedCallersO…...

第三十八周周报:文献阅读 +BILSTM+GRU+Seq2seq

目录 摘要 Abstract 文献阅读:耦合时间和非时间序列模型模拟城市洪涝区洪水深度 现有问题 提出方法 创新点 XGBoost和LSTM耦合模型 XGBoost算法 ​编辑 LSTM(长短期记忆网络) 耦合模型 研究实验 数据集 评估指标 研究目的 洪…...

天津最新web前端培训班 如何提升web技能?

随着互联网的迅猛发展,web前端成为了一个热门的职业方向。越来越多的人希望能够通过学习web前端技术来提升自己的就业竞争力。为了满足市场的需求,许多培训机构纷纷推出了web前端培训课程。 什么是WEB前端 web前端就是web给用户展示的东西,…...

Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

记录一下遇到的问题:Linux系统下Qt编译第三方动态库会生成多个.so文件,不了解的小伙伴可能很疑惑: (1)Linux 下 QT 生成的(.o)、(.a)和(.so)三个文…...

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面): 这是一篇小文,是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来,是因为这一段相对于原文是可以完全独立的,也是因为我…...

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常…...

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考: BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…...

Qt pro文件

1. 项目通常结构 2.pri文件 pri文件可定义通用的宏,例如创建一个COMMON.pri文件内容为 COMMON_PATH D:\MyData 然后其它pri或者pro文件如APPTemplate.pro文件中通过添加include(Common.pri) ,QtCreator就会自动在项目结构树里面创建对应的节点 3.变量…...

郑州网站制作的公司哪家好/杭州seo百度关键词排名推广

转自:http://dantvt.is-programmer.com/posts/7974.html 通过 USACO 4.2.1 Ditch 学习一下最大流算法 。可惜它给的测试数据几乎没有任何杀伤力,后面测试时我们采用 DD_engi 写的程序生成的加强版数据。 总体上来说,最大流算法分为两大类&a…...

网站建设好不好学/大庆黄页查询电话

1、SMTP(Simple Mail Transfer Protocal)称为简单邮件传输协议,目标是向用户提供高效、可靠的邮件传输。 SMTP的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。工作在两种情况下&#xff…...

简单html5网页设计/广州灰色优化网络公司

实现服务的负载均衡及高可用 在前面我们重新实现了微服务,其中天气数据采集微服务、天气预报微服务都重新采用了Feign技术,以便通过应用的名称来访问外部RESTful服务。结合Eureka部署实例,就能实现微服务的负载均衡及高可用。 天气预报系统的…...

装饰公司网站php源码/国际购物网站平台有哪些

Win10的IIS与以前版本的一个区别:Win10系统的IIS是v10,在“启用或关闭Windows功能”中启用IIS时,如果按照默认勾选,则在应用程序池中没有ASP.NET 4.0。过去我们的办法是注册一下asp.net4.0,即在控制台下运行C:\WINDOWS…...

wordpress网站管理系统/软文大全

只听说过汇编,c做嵌入式,从不曾想JAVAScript也牛到涉入硬件领域了,原本对他的思维定格就是一个浏览器脚本。看来真应了那句话‘只有想不到,没有做不到’ 话不多说看看这些大佬的帖子在嵌入式设备中使用 JavaScript 的前景...

安全教育平台登录入口网址/网站搜索引擎优化报告

为什么80%的码农都做不了架构师?>>> 移动端高清、多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿。 对于移动端开发而言…...