欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > python爬虫的学习流程(1-前提准备)

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

2025/1/22 19:05:29 来源:https://blog.csdn.net/2203_75970230/article/details/145249733  浏览:    关键词:python爬虫的学习流程(1-前提准备)

这里主要记录一下我的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 实现爬虫的知识准备已经足够👏

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com