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 实现爬虫的知识准备已经足够👏

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

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

相关文章

PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控

一、简介 在现代深度学习的研究和开发中&#xff0c;模型的可视化和监控是不可或缺的一部分。PyTorch&#xff0c;作为一个流行的深度学习框架&#xff0c;通过其丰富的生态系统提供了多种工具来满足这一需求。其中&#xff0c;torch.utils.tensorboard 是一个强大的接口&…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证6)

重新创建WebApi项目&#xff0c;安装Microsoft.AspNetCore.Authentication.JwtBearer包&#xff0c;将之前JwtBearer测试项目中的初始化函数&#xff0c;jwt配置类、token生成类全部挪到项目中。   重新编写login函数&#xff0c;之前测试Cookie和Session认证时用的函数适合m…

【Linux系统】—— 编译器 gcc/g++ 的使用

【Linux系统】—— 编译器 gcc/g 的使用 1 用 gcc 直接编译2 翻译环境2.1 预处理&#xff08;进行宏替换&#xff09;2.2 编译&#xff08;生成汇编&#xff09;2.3 汇编&#xff08;生成机器可识别代码&#xff09;2.4 链接2.5 记忆小技巧2.6 编译方式2.7 几个问题2.7.1 如何理…

[已解决]chatgpt被降智了怎么办?(无法联网、识别图片、文件、画图)

文章目录 1、治标办法一发图2、治本方法—使用ChatGPT中国区代理官方站点 1、治标办法一发图 该方法原本就有&#xff0c;但是在1.1日ChatGPT降智事件中突然失效。于1月11日&#xff0c;该方法又突然有效&#xff0c;因此也标志着本次ChatGPT降智事件的结束。当你ChatGPT出现降…

缓存、数据库双写一致性解决方案

双写一致性问题的核心是确保数据库和缓存之间的数据同步&#xff0c;以避免缓存与数据库数据不同步的问题&#xff0c;尤其是在高并发和异步环境下。本文将探讨双写一致性面临的主要问题和解决方案&#xff0c;重点关注最终一致性。 本文讨论的是最终一致性问题 双写一致性面…

element el-table合并单元格

合并 表格el-table添加方法:span-method"” <el-table v-loading"listLoading" :data"SHlist" ref"tableList" element-loading-text"Loading" border fit highlight-current-row :header-cell-style"headClass" …

qml OpacityMask详解

1、概述 OpacityMask是QML&#xff08;Qt Meta-Object Language&#xff09;中的一种图形效果&#xff0c;它使用另一个项目&#xff08;通常是一个图像或图形项&#xff09;作为遮罩来控制源项目的透明度。这种效果允许开发者通过遮罩的alpha通道来精确地控制源项目中哪些部分…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…

渗透测试之SSRF漏洞原理 危害 产生的原因 探测手法 防御手法 绕过手法 限制的手段

目录 SSRF说明: SSRF攻击流程 原理&#xff1a; 危害: SSRF产生的原因 ssrf漏洞利用{危害} 探测手法是否存在SSRF漏洞 如何找ssrf漏洞位置 分享连接地址 google hack url关键字 PHP语言中可能出现的ssrf漏洞函数 file_get_contents sockopen() curl_exec() SSRF…

centos9编译安装opensips 二【进阶篇-定制目录+模块】推荐

环境&#xff1a;centos9 last opensips -V version: opensips 3.6.0-dev (x86_64/linux) flags: STATS: On, DISABLE_NAGLE, USE_MCAST, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, HP_MALLOC, DBG_MALLOC, CC_O0, FAST_LOCK-ADAPTIVE_WAIT ADAPTIVE_WAIT_LOOPS1024, MAX_RE…

【前端】CSS学习笔记(1)

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

电阻电位器可调电阻信号隔离变送器典型应用

电阻电位器可调电阻信号隔离变送器典型应用 产品描述&#xff1a; 深圳鑫永硕科技的XYS-5587系列是一进一出线性电子尺(电阻/电位计信号及位移)信号隔离变送器&#xff0c;是将输入电阻,线性电子尺,角度位移传感器信号进行采集,隔离,放大并转换成模拟量信号的小型仪表设备,并以…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者&#xff1a;Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商&#xff0c; 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点&#xff0c;能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…

文件系统格式RAW数据恢复全攻略

一、RAW文件系统格式深度解析 在数据存储的世界里&#xff0c;文件系统扮演着至关重要的角色&#xff0c;它负责管理和组织硬盘、U盘、SD卡等存储设备上的数据。而RAW文件系统格式&#xff0c;作为一种特殊状态&#xff0c;常常让许多用户感到困惑与不安。RAW格式并非一种标准…

探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验

目录 简介&#x1f31f; 主要特点&#x1f4e5; 安装步骤1. 下载2. 配置环境和安装依赖3. 模型目录说明 &#x1f680; 运行 Stable-Diffusion-Webui-Forge1. 进入项目目录2. 运行项目3. 打开页面 &#x1f3a8; 使用体验常见问题&#x1f4dd; 小结 简介 Stable-Diffusion-We…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Yearning开源MySQL SQL审核平台

一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用. 本地部署&#xff0c;注重隐私&#xff0c;简单高效的MYSQL审计平台。 它可以通过流程审批&#xff0c;实现真实线上环境sql的审核和执行&#xff0c;还可以回滚执行&#xff0c;能够确保线上SQL更新的可靠性…

PyTorch使用教程(10)-torchinfo.summary网络结构可视化详细说明

1、基本介绍 torchinfo是一个为PyTorch用户量身定做的开源工具&#xff0c;其核心功能之一是summary函数。这个函数旨在简化模型的开发与调试流程&#xff0c;让模型架构一目了然。通过torchinfo的summary函数&#xff0c;用户可以快速获取模型的详细结构和统计信息&#xff0…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路&#xff0c;希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年&#xff0c;年初拿高绩效&#xff0c;但感觉逐渐被公司一点点剥离出中心&#xff1b;年中一直在学习防患于未然&#xff1b…