python爬虫的学习流程(1-前提准备)

news2025/1/24 13:49:56

这里主要记录一下我的python爬虫初级的学习的流程

1.python爬虫入门实战课

什么是爬虫?众说纷纭,我们引用维基百科上对网络爬虫的介绍:

网络爬虫(英语:Web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。

1.1爬虫可以胜任的工作

抓取视频、抓取文本、抓取图片、抓取音乐。

通过爬虫获取数据可以进行市场调研和数据分析,可以作为机器学习和数据挖掘的原始数据。

1.2掌握爬虫后,下面哪些工作可以自动化完成

数据收集、数据分析、下载视频等

1.3使用Python编写爬虫的优点

上手入门简单

丰富第三方库

语法简单

2.python基本介绍

Python是荷兰计算机科学家Guido van Rossum 发明的一款解释型、强类型、动态的、支持对象的高级程序设计语言。

初期 Python 仅仅是个人项目,现在已经发展成了时下最热门的编程语言之一,2020 年初在 TIOBE 榜单稳定排第三。Python 在人工智能的应用领域占领绝对优势。

Python 是解释性语言,非常适合作为入门的程序设计语言,它无须编译,编写完成即可运行。

尽管 Python 是动态语言,但它的数据类型是强类型的,避免了像JS这样过分动态为初学者带来各种奇怪的困惑。

2.1python的优势

简而言之,python有三大优势:

入门简单

Python 语法简单,核心关键字数量较少,结构清晰。为了达到结构清晰的目的,Python 用代码缩进来表达程序结构,在一般的编程语言,缩进往往只是一种美化代码的方法。这一点非常适合强迫症用户(处女座的应该喜欢😋)。

丰富的标准库

Python 内置的标准模块非常丰富,可以满足一般科学计算、文本处理、后端服务等需求,Python 甚至内置了一个 Demo 性质 HTTP 服务器。用户可以借助一个丰富的标准库,用较少的代码就可以构建一个规模较大的应用。对语言流行的助力是非常大的。

生态优秀

Python 在 Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等领域都有非常高质量的模块和库。使用高质量的库进行开发,系统中的坑自然会少很多。

2.2python的缺点

Python 对 CPU 的利用效率的确有限

其次,Python 程序运行期间难以精确控制内存占用,在使用内置类库来处理大规模数据的时候,占用的内存可能越来大,引起 OOM(Out Of Memory, 内存溢出) 问题。

3.python操作入门

3.1. Python注释

注释 的目的是让阅读者能够轻松读懂每一行代码的意义,同时也为后期代码维护提供便利。在 Python 中,单行注释以#号开头,如下所示。

# 第一个注释

print('hello world')

注意:不符合Python的注释规则-多行注释以"开头和结尾

3.2Python变量

1.变量赋值

Python 的变量无须提前声明,赋值的同时也就声明了变量,如下面代码:

a = 42

print(a)

2.变量命名

Python 中具有自带的关键字(保留字),任何变量名不能与之相同。在 Python 的标准库中提供了一个 keyword 模块,可以查阅当前版本的所有关键字,如下所示。

import keyword

print(keyword.kwlist)

输出为:

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

4.python数字与字符串

Python 数据类型

在 Python 中有 6 大数据类型:

  1. number(数字)
  2. string(字符串)
  3. list(列表)
  4. tuple(元组)
  5. set(集合)
  6. dictionary(字典)。

Python3支持4种类型的数字:

  1. int(整数类型)
  2. float(浮点类型)
  3. bool(布尔类型)
  4. complex(复数类型)

5.python复杂数据类型

5.1列表list

前一节我们回顾了Python中最基本的数字及字符串,但数字及字符串还不足以帮我们解决复杂的问题。
在真实的编程中其他4个数据类型list(列表)、tuple(元组) 、set(集合)、 dictionary(字典) 可谓是python中的大杀器,用好了,可以快速解决很多问题。

接下来我们还是简单回顾下此四种复杂数据类型的基本知识,如果想要深入学习请移步我们出的Python 入门课程。

列表格式

Python 列表是任意对象有序集合,写在中括号[]里,元素之间用逗号,隔开。这里的任意对象,既可以是列表,也可以是字符串,如下所示:

a_list = [1, 2, '12', [1, 2, '12']]

print(a_list)

输出为:[1, 2, '12', [1, 2, '12']]

列表切片

每个列表中的元素从0开始计数,如下代码可以选取列表中的第一个元素:

a_list = [1, 2, '12', [1, 2, '12']]

print(a_list[0])

输出为:1

列表删除操作可以使用 remove()方法,只需要在变量名称后面加一个点号,就可以轻松调用。
如果你是用pycharm作为IDE有自动联想功能,选中目标方法或函数,按【Tab】键即可快速键入,如下图.

以下代码用于删除第3个元素,并用 print()函数将结果打印出来。其中 remove()方法用于删除列表的元素。

a_list = [1, 2, '12', [1, 2, '12']]

a_list.remove('12')

print(a_list)

输出为:[1, 2, [1, 2, '12']]

注意:remove()方法传入的是列表元素的值,不是下标,并且只会删除出现的第一个,如果传入的值不在列表中,会报错。

5.2元组tuple

元组与列表类似,也是任意对象有序集合,不同之处在于元组的元素不能修改。元组写在小括号()里,元素之间用逗号,隔开,如下所示:

a_tuple = (1, 2, '12', (1, 2, '12'))

print(a_tuple)

print(a_tuple[0])

print(a_tuple[1:3])

(1, 2, '12', (1, 2, '12'))

1

(2, '12')

如果你用pycharm对变量a_tuple进行联想提示,会发现没有一个方法可以修改元组本身,如下图

5.3集合set

集合是一个无序、不重复元素序列,可以使用大括号{}set()函数创建集合。需要注意的是,一个空集合必须使用set()函数创建而不能使用大括号{},因为大括号{}是用来创建空字典的,如下所示:

age0 = {18,19,20,21}

age1 = set({18,19,20,21})

empty_set = set() #空集合,必须用set()

print(age0)

print(age1)

print(empty_set)

输出为:

{18, 19, 20, 21}

{18, 19, 20, 21}

set()

集合是可以修改的,并且提供了很多内置运算如计算两个集合的交、并、差集合。

5.4字典dict

字典是一种可变容器模型,且可存储任意类型的对象,用{}标识。字典是一个无序的键keyvalue对的集合,格式为:a_dict={key1:v1, key2:v2, key3:v3}

比如下面代码创建一个字典:

a_dict = {

    'k1': 1,

    'k2': 2,

    'k3': 3

}

print(a_dict)

输出为:{'k1': 1, 'k2': 2, 'k3': 3}

当字典增加数据时,可以使用下面的方法。

a_dict = {

    'k1': 1,

    'k2': 2,

    'k3': 3

}

# 增加一个键值对

a_dict['k4'] = 4

print(a_dict)

输出为:{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

当字典删除数据时,可以使用 del()函数,代码如下:

a_dict = {

    'k1': 1,

    'k2': 2,

    'k3': 3

}

# 增加一个键值对

a_dict['k4'] = 4

# 删除一个键值对

del a_dict['k1']

print(a_dict)

输出为: {'k2': 2, 'k3': 3, 'k4': 4}

6.python语句与函数

在python主要使用if-elif-else语句进行条件控制。

假设登录验证操作,首先给变量 password(密码)赋值,然后判断 password 是否正确,正确就打印"login success!"(登录成功!),错误就打印"wrong password"(密码错误)。

password='12345'

if password == '12345':

    print("login success!")

else:

    print("wrong password")

在 Python 中判断是否相等可以使用两个等号==(单个等号表示赋值)。 条件语句的语法如下:

if 条件判断1:

    执行语句...

elif 条件判断1:

    执行语句..

elif ...

    ...

else:

    都不满足上上述条件判断,执行语句

6.python语句及函数

6.1条件语句

完善函数sorta_num,给定2个intab,并返回它们的和。但是如果和在[10,19]之间,则直接返回20.

def sorta_sum(a, b):

ab_sum = a + b

10 <= <= 19:

return 20

return ab_sum

6.2循环语句

在 Python 中要注意缩进,循环语句根据缩进来判断执行语句的归属。

下面用 for 语句实现 1~9 的累加。

sum = 0

for i in range(1,10, 1): #注意不包含10

    sum += i

print(sum)

输出结果为:45

其中 range 表示范围,i 从 1(第1个参数)开始迭代,每次加1(第3个参数),直到 i 变成了 10(第 2 个参数)结束,因此当 i=10 时不执行语句,for 循环是 9 次迭代

for 语法如下:

for 迭代变量 in 迭代次数:

    执行语句...

如果是列表或字典,则不用 range()函数,直接用列表或字典,此时 i 表示列表或字典中的元素,代码如下:

a_list = [1,2,3,4,5,6,7,8,9]

sum = 0

for i in a_list:

    print(i)

输出为:

1

2

3

4

5

6

7

8

9

6.3函数

在之前接触的函数中,print()是将结果打印出来的函数,int()是将字符串类型转换成数据类型的函数。类似这种函数,统称为内建函数,内建函数可以直接调用。

有内就有外,外建函数其实就是通常所讲的自定义函数。

自定义函数的语法如下:

def 函数名(参数列表):

    定义过程...

    return 返回值

def(define,定义)是创建函数的方法,下面用 def 创建方程:y=5x+2:

def y(x):

    return 5*x + 2

print(y(1))

print(y(2))

输出为:

7

12

7.python进阶

总结函数

通过前面的学习,我们学到了:

  • Python基本的语法知识,如注释、缩进、变量定义
  • Python中6大基础数据类型(可以回忆下是哪些),
  • Python中基本的条件、循环、函数相关知识

这些基本的知识是Python编程的核心基石,有了它们基本可以编写Python程序,但如果要编写一个比较完善的爬虫程序,还需要了解一些更深入的特性,所以接下来我们将前面的知识融会贯通下,顺便学习下Python中一些高级的用法。

假设有个文件p2.py 代码如下:

#! env python

def log(s):

    print(s)

log('hello file')

if __name__ == '__main__':

    log('hello main')

def 指令,可以定义一个函数/方法。冒号: 缩进下的代码是函数体。缩进在 Python 中是严格限制的,不能使用一些比较落后的文本编辑器对 Python 代码进行格式化,因为它们可能会破坏程序结构。建议使用pycharm编辑器,并选择 2 个或者 4 个空格做代码缩进。

函数自然是相对封闭的,在函数体内创建的变量,只能在函数体内可见

运行 python p2.py,打印出两行日志:

hello file

hello main

模块

模块是 Python 代码组织单元,如下使用内置模块 datetime

import datetime

print(datetime.datetime.now())

在 Python中可以用 dir 方法来列举模块内的所有成员(类/对象/方法):

import datetime

print(dir(datetime))

输出为:['MAXYEAR', 'MINYEAR', '__doc__', '__file__', '__name__', '__package__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'tzinfo']

最简单的模块是一个.py 文件,上面p2.py文件就可以作为自定义模块引入,如下在python交互命令行中引入上述模块

➜ python3 Python 3.8.5 (default, Jul 21 2020, 10:48:26)

[Clang 11.0.3 (clang-1103.0.32.62)] on darwin

Type "help", "copyright", "credits" or "license" for more information. >>> import p2

hello file

看到屏幕只打印了 hello file,和直接运行 python p2.py 不同。

原因是模块内置变量 __name__ 是随着运行环境改变的,当模块 p2 被作为运行入口时,它是的值是 'main';当被其他模块引入时,它的取值是 p2

可以在解释器中检查:

>>> print(p2.__name__)

p2

dir 查看一下,p2 模块的 log 方法被导出。

>>> dir(p2) ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'log']

不仅模块方法可以导出,模块变量也可以导出。 模块的更上一层管理结构是包,多个相关的模块可以组成一个包来发布

模块

请在代码创建一个当前日期的变量current_time 并且用datetime.now()语句 赋值,然后打印看下其输出。

from datetime import datetime

current_time = datetime.now()

print(current_time)

类及面向对象

Python 是支持面向对象的,以非常直观的方法绑定对象的方式来组织面向对象的代码。

class 指令来定义类:

class Logger:

    def __init__(self, level):

        self.log_method = print

        self.level = level

    def log(self, s):

        self.log_method(s)

if __name__ == '__main__':

    mylog = Logger(0)

    mylog.log('in main')

_init_ 是构造方法,log 是自定义方法。和 C++/Java 不同,两个方法都必须把方法绑定的对象明显列出,就是上面的 self 对象。self 不是关键字,只是 Python 老铁的一个约定习惯,用 thisme 等名字也可以。在调用对象的方法时,对象已经绑定了,参数列表不需要再给出对象本身

注意:虽然 Python 可以说一切皆对象,使用 Python 进行编程不强求使用面向对象的思维。可以根据自己的水平和解决问题的类型采取合适的程序架构。

至此,用 Python 实现爬虫的知识准备已经足够👏

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

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

相关文章

数据结构初阶之双向链表的介绍与双向链表的实现

一、概念与结构 带头双向循环链表 next &#xff1a;指向下一个结点&#xff08;后继结点&#xff09; prev &#xff1a;指向前一个结点&#xff08;前驱结点&#xff09; 二、实现双向链表 项目创建的时候&#xff0c;要创建一个头文件&#xff08;.h&#xff09;List.h …

CICD集合(六):Jenkins配置Editable Email Notification

CICD集合(六):Jenkins配置Editable Email Notification 1、系统配置 1.1、Jenkins Location 1.2、邮件通知 1、SMTP服务器:imap.exmail.qq.com (因qq企业邮箱) 2、邮箱后缀:@xxx.com 3、勾选:使用SMTP认证 用户名:

Golang 中除了加锁还有哪些安全读写共享变量的方式?

Golang 中除了加锁还有哪些安全读写共享变量的方式&#xff1f; 在 Golang 中&#xff0c;除了使用 Mutex 锁来保护共享变量外&#xff0c;还可以通过 Channel 和 原子性操作 来实现安全读写共享变量。 1. 使用 Channel 原理 Channel 是 Golang 中用于 Goroutine 之间通信的…

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…

F/V/F/I频率脉冲信号转换器

F/V/F/I频率脉冲信号转换器 概述&#xff1a;捷晟达科技的JSD TFA-1001系列是一进一出频率脉冲信号转换器(F/V转换器),该频率转换器是将频率脉冲信号(方波、正弦波、锯齿波)转换成国际标准的模拟量电压(电流)信号,并远距离无失真传送到控制室(如:PLC,DCS,AD,PC采集系统)产品的输…

Windows的docker中安装gitlab

一.Windows的docker中安装gitlab 1.通过阿里云拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh 2.在本地创建备份数据的目录 mkdir -p D:home/software/gitlab/etc mkdir -p D:home/software/gitlab/logs mkdir -p D:home/software/gitlab/dat…

【Linux】理解Linux中一切皆文件、缓冲区、ext2文件系统、软硬链接

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、如何理解在Linux中一切皆文件&#xff1f;1.1 概述1.2 文件类型1.3 优势 2、缓冲区2.1 为什么要引入缓冲区&#xff1f;2.2 缓…

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的&#xff0c;但它相较于其他数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;会复杂一些&#xff0c;因为 Oracle 数据库有一些特定的要求&#xff0c;如操作系统和库的依赖&#xff0c;以及许可证问题。 不过&#xff0c;Ora…

【数据库】详解MySQL数据库中的事务与锁

目录 1.数据库事务 1.1.事务的四大特性 1.2.事务开启的方式 1.3.读一致性问题及其解决 2.MVCC解决读一致性问题原理 2.1.MVCC概念 2.2.准备环境 3.MySQL中的锁 3.1.行锁之共享锁 3.2.行锁之排它锁 1.数据库事务 数据库事务&#xff08;Transaction&#xff09;是一种…

springboot 配置redis

环境配置 springboot3.4 redis5.0.14 redis准备参考下面文章 window下安装redis以及启动 redis客户端安装 引入依赖 <!-- 集成redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-…

EEG代码实践:diffusion EEG——扩散模型生成EEG信号

2024/1/22&#xff1a; 原始EEG信号的生成说实话一直做不到让人满意的水平&#xff0c;之前做的MIEEG复现也迟迟没有调整到自己想要的程度&#xff0c;与论文中的效果还是有些差距。改换思路使用离散小波变换&#xff0c;用变换之后的信号做生成任务则好了许多。从大二开始一直…

Banana Pi BPI-RV2 开发板矽昌通信 RISC-V路由芯片SF21H8898优势亮点

Banana Pi BPI-RV3开源路由器 1. 8898芯片具备强大的网络加速硬件性能&#xff0c;能够在小字节报文条件下实现高效数据转发&#xff1a;  单WAN口性能&#xff1a;支持 64 字节报文单向转发速率达到 2.5 Gbps&#xff0c;双向转发速率为 5 Gbps。双WAN口性能&#xff1a;支…

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告&#xff1a;高光谱成像技术检测食物新鲜度 检测原理&#xff1a;不同新鲜程度的食品&#xff0c;其化学成分和结构会有所不同&#xff0c;在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

xxljob执行失败,xxl-job remoting error(sl.nts.com), for url : http://xxxxxxxxxx/run

问题 项目部署后&#xff0c;发现xxljob没有正常工作&#xff0c;报错 尝试解决&#xff1a; &#xff08;1&#xff09;检查xxljob配置&#xff08;无问题&#xff09; &#xff08;2&#xff09;检查服务器hosts文件域名配置&#xff08;依旧无问题&#xff09; 各种能检查…

什么是全息展示

全息展示。这一术语来源于“全息图”&#xff08;Holography&#xff09;的概念&#xff0c;而“全息图”这个词是由希腊词根 "holos" 演变而来&#xff0c;意为“整体的”或“完整的”。全息技术的核心在于它能够捕捉并再现物体的所有光学信息——不仅仅是强度&…

服务器内部是如何运行的

服务器内部的运行可以从硬件和软件两个方面来解释。 一、硬件层面 服务器的硬件与普通计算机相似,但它通常具有更高的性能和更强的扩展性。服务器硬件包括: 1.中央处理单元(CPU):负责执行服务器上的计算任务。服务器一般配备多核心的高性能CPU,以支持多个请求并行处理…

【Linux】文件操作、系统IO相关操作、inode和输入输出重定向

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、理解文件1.1 狭义理解1.2 广义理解1.3 文件操作1.4 系统角度 2、系统文件IO2.1 文件相关操作2.2 文件描述符2.3 重定向 3、动静…

Jetson Xavier NX (ARM) 使用 PyTorch 安装 Open3D-ML 指南

由于 Jetson 为 ARM64 (aarch64) 的系统架构&#xff0c;所以不能用 pip install 直接安装&#xff0c;需要通过源码编译。 升级系统 JetPack 由于 Open3D-ML 目前只支持 CUDA 10.0 以及 CUDA 11.*&#xff0c;并且 JetPack 的 CUDA 开发环境只有10.2、11.4以及12.2&#xff0…

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…

《keras 3 内卷神经网络》

keras 3 内卷神经网络 作者&#xff1a;Aritra Roy Gosthipaty 创建日期&#xff1a;2021/07/25 最后修改时间&#xff1a;2021/07/25 描述&#xff1a;深入研究特定于位置和通道无关的“内卷”内核。 &#xff08;i&#xff09; 此示例使用 Keras 3 在 Colab 中查看 GitHub …