Python爬虫基础之三

news/2024/7/19 9:48:37 标签: python, 爬虫, 开发语言, 前端, 数据分析

Python爬虫基础包括HTTP协议、HTML、CSS和JavaScript语言基础、requests库的使用、Beautiful Soup库的使用、xpath和正则表达式的使用等。此外,还应该了解反爬虫机制和爬虫的一些常见问题及解决方法。

上一篇文章讲解了有关条件判断语句、循环语句、元组、字典等相关知识,本节将围绕代码异常处理以及捕获来实践。

10、异常处理

10.1 异常简介

python"> print '-----test--1---'  
    open('123.txt','r')  
 print '-----test--2---'

在这里插入图片描述

打开一个不存在的文件123.txt,当找不到123.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:123.txt (没有123.txt这样的文件或目录)

10.2 捕获异常

python">try:
     print('-----test--1---')  
    open('123.txt','r')           
    print('-----test--2---')
except IOError:
    pass

此程序看不到任何错误,因为用except 捕获到了IOError异常,并添加了处理的方法
pass 表示实现了相应的实现,但什么也不做;如果把pass改为print语句,那么就会输出其他信息

总结:

在这里插入图片描述

把可能出现问题的代码,放在try中
把处理异常的代码,放在except中

python">try:
  print num 
except IOError:
  print('产生错误了')

上例程序,已经使用except来捕获异常,但是还会看到错误的信息提示

except捕获的错误类型是IOError,而此时程序产生的异常为 NameError ,所以except没有生效

python">try:
  print num
except NameError:
  print('产生错误了')

Python的一些內建异常:

| 异常 | 描述 |
| —————– | —————————- |
| Exception | 常规错误的基类 |
| AttributeError | 对象没有这个属性 |
| IOError | 输入/输出操作失败 |
| IndexError | 序列中没有此索引(index) |
| KeyError | 映射中没有这个键 |
| NameError | 未声明/初始化对象 (没有属性) |
| SyntaxError | Python 语法错误 |
| TypeError | 对类型无效的操作 |
| ValueError | 传入无效的参数 |
| ZeroDivisionError | 除(或取模)零 (所有数据类型) |

10.3 捕获多个异常

python">#coding=utf-8 
try:
 print('-----test--1---')
 open('123.txt','r') # 如果123.txt文件不存在,那么会产生 IOError 异常  
 print('-----test--2---')
 print(num)# 如果num变量没有定义,那么会产生 NameError 异常
 except (IOError,NameError):
 #如果想通过一次except捕获到多个异常可以用一个元组的形式

10.4 获取异常的信息描述

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

10.5 try…finally…

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等

python">import time
try:
    f = open('test.txt')
    try:
        while True:
            content = f.readline()
            if len(content) == 0:
                break
            time.sleep(2)
            print(content)
    except:
         #如果在读取文件的过程中,产生了异常,那么就会捕获到  
         #比如 按下了 ctrl+c
        pass
    finally:
        f.close()
        print('关闭文件')
except:
    print("没有这个文件")

test.txt文件中每一行数据打印,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些。在程序运行的时候,按Ctrl+c中断(取消)程序。
我们可以观察到KeyboardInterrupt异常被触发,程序退出。但是在程序退出之前,finally从句仍然被执行,把文件关闭。

11、Python知识

python">除法
除 /
整除 //
求余 %
商和余数的元组 divmod

移位操作

左移(<<)

python">a<<n,则a' =a*(2^n),左移 n 位相当于原操作数乘以 2^n,原操作数不发生变化。

>>> 3<<1      # 向右移动一位,相当于是乘以2
6             
>>> -3<<2     # 向右移动一位,相当于是乘以4
-12

右移(>>)

python">a>>n,则a' =a//(2^n),左移 n 位相当于原操作数整除 2^n,原操作数不发生变化。

>>> 2>>1     # 移动一位,相当于是2//2
1            
>>> 2>>2     # 相当于先左移一位得到1,结果1再除以2等于0
0
>>> 2>>3     # 相当于2//8
0  
          
>>> -8>>2    # 移动2位,相当于-8//4
-2
>>> -8>>3    # 移动3位,相当于是用结果-2再除以2
-1
>>> -8>>4    # 移动4位,相当于是用结果-1再除以2
-1

如果操作数是正数,那么对之不停进行右移操作,最终结果一定可以得到 0;如果操作数是负数,对之不停进行右移操作,最终结果一定可以得到 -1。

匿名函数lambda

匿名函数 lambda 是指一类无需定义标识符(函数名)的函数或子程序。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

语法:

python">lambda [arg1,arg2,.....argn]:expression

冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式(只能为一个)。其实lambda返回值是一个函数的地址,也就是函数对象。

python">lambda arg: print("hello,world",arg)

lambda表达式限制只能包含一行代码,但是其实可以利用元组或列表强行让其包含多行。(但是这么做会严重影响可读性,除非万不得已不要使用)

python">lambda :(
    print("hello"),
    print("world"),           
)

切片

在这里插入图片描述

python">t=[1,2,3,4,5]

print(t[1:])     取第二个到最后一个元素
结果:[2 3 4 5]

print(t[:])     取所有元素
结果:[1 2 3 4 5]

print(t[1:3])     取t[1]-t[2]
结果:[ 2 3 ]

print(t[:-1])     除了最后一个取全部
结果:[ 1 2 3 4 ]
 
print(t[::-1])     取从后向前(相反)的元素
结果:[ 5 4 3 2 1 ]
 
print(t[2::-1])     取从下标为2的元素翻转读取
结果:[ 3 2 1 ]

字符串方法

join(iterable)

获取可迭代对象(iterable)中的所有项目,并将它们连接为一个字符串。

实例1:

python">myTuple = ("Bill", "Steve", "Elon")
x = "#".join(myTuple)
print(x)

'''

输出:
Bill#Steve#Elon
'''

实例2:

python">myDict = {"name": "Bill", "country": "USA"}
mySeparator = "TEST"
x = mySeparator.join(myDict)
print(x)

'''
输出:
nameTESTcountry
'''

注释:在使用字典作为迭代器时,返回的值是键,而不是值。

split(separator, max)

将字符串拆分为列表,您可以指定分隔符,默认分隔符是任何空白字符。若指定 max,列表将包含指定数量加一的元素。

实例1:

python">txt = "welcome to China"
x = txt.split()
print(x)

'''
输出:
['welcome', 'to', 'China']
'''

实例2:

python">txt = "apple#banana#cherry#orange"
# 将 max 参数设置为 1,将返回包含 2 个元素的列表!
x = txt.split("#", 1)
print(x)

'''
输出:
['apple', 'banana#cherry#orange']
'''

内置函数

enumerate()

用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

实例1:

python">>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
... 
0 one
1 two
2 three

实例2:

python">>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

exec()

exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码。

python"># 单行语句字符串
>>>exec('print("Hello World")')
Hello World

#  多行语句字符串
>>> exec ("""for i in range(5):
...     print ("iter time: %d" % i)
... """)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4

http://www.niftyadmin.cn/n/264296.html

相关文章

matlab学习教程大纲

matlab学习教程大纲 以下是一个的MATLAB 学习教程大纲&#xff1a; 基础语法 MATLAB 界面和工作空间 变量、常量和数据类型 数组和矩阵操作 控制流程语句&#xff08;if/else、for、while&#xff09; 函数和脚本 输入/输出操作 高级语法 文件操作&#xff08;读写文…

【AUTOSAR】【信息安全】CSM

目录 一、概述 二、依赖模块 三、功能描述 3.1 基本体系结构 3.2 通用行为 3.2.1 正常操作 3.2.2 设计说明 3.3 错误分类 3.3.1 开发错误 3.3.2 运行时错误 四、API接口 4.1 通用接口 4.2 加密接口 4.3 秘钥接口 4.4 Job接口 4.5 回调接口 4.6 调度接口 一、概…

SpringBoot 使用 Docker Registry Api

Spring Boot是一个快速开发Web应用程序的框架&#xff0c;它提供了许多方便的工具和库&#xff0c;使得开发过程更加高效。在部署Spring Boot应用程序时&#xff0c;使用Docker容器是现代化和流行的选择。在此背景下&#xff0c;本文将介绍如何使用Docker Registry API来构建、…

大三生变身AI顾问入职Prada 抢饭碗的AI造出新饭碗

“ChatGPT让我有点焦虑&#xff0c;我长大了还能找到工作吗&#xff1f;”这是一名小学生透过视频表达的担忧&#xff0c;她有点懊恼&#xff0c;“GPT简直无所不能&#xff0c;会画画、编程、写论文、创作音乐......而我们还在学加减乘除。”这段视频让网友直呼&#xff0c;AI…

体验 Google Bard

环境 windows 10 64bitGoogle Bardpython 3.8 简介 本篇介绍一个开源的 Google 聊天机器人Bard 的 API 逆向工程&#xff0c;使用它&#xff0c;可以免费的使用 Bard 服务&#xff0c;项目地址&#xff1a;https://github.com/acheong08/Bard 安装及使用 通过 pip 来安装 pip &…

边界点射箭问题

问题 题目 问题: 给定一个有目标位置和边界单元格为空的 n n 方格表&#xff0c;找出哪个位于边界单 元格的箭头会击中最多连续的目标而不经过目标之间的任何空单元格。箭头方向为&#xff1a; (A)←、(B) ↑、 © →、(D) ↓、(E) ↖、 (F) ↗、 (G) ↘ 和 (H) ↙。 将…

ChatGPT热中的冷思考

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Docker | 解决docker 容器中csv文件乱码的情况

问题描述&#xff1a;在Ubuntu docker容器中&#xff0c;打开.csv文件时显示乱码 问题如图 错误分析&#xff1a; 用locale查看所用容器支持的字符集 从输出可以看到&#xff0c;系统使用的是POSIX字符集&#xff0c;POSIX字符集是不支持中韩文的&#xff0c;而UTF-8是支持中…