零基础速成爬虫-Python基础
背景
如果需要10天完成一个爬虫项目的最小化实现,要求有爬虫程序和可视化界面,我们需要最小化掌握的知识有什么呢?Python基础,爬虫软件包,Echarts组件。我会逐一更新博文,做为这次速成的成果。本篇讲的爬虫程序需要最小化掌握的python基础知识,主要包括为什么要使用python爬虫,python的程序主干,数据结构,异常处理。
什么是爬虫,为什么是Python爬虫
在互联网上自动抓取数据这个需求的历史差不多和互联网一样长。一个自动化的程序,在互联网的Web端采集数据,就叫作网络爬虫(Web crawler)。网络爬虫可以让你一次查看几千甚至几百万个网页。
Python语言容易上手,大量的函数库,简洁的语言,让初学者也能站在巨人的肩膀上做事。跳过复杂的细节,观其大略,是很重要的入门手段。
程序主干
所有的程序语言,其主干只有三种基本控制结构,顺序,选择,重复。顺序对应的知识是函数,告诉你先干什么,后干什么。选择对应的是条件判断,告诉你向左走还是向右走。重复则是反复做同一件事,达到某个条件后完成。
顺序——函数
Python程序中会有一个主函数。整个函数的执行顺序就是主函数的执行顺序,一个流程清晰的程序应该是由对函数的逐次调用来实现的。下面是Python程序中的主函数。
if __name__ == '__main__':
#调用函数
main()
函数定义
带参数的函数
函数可以根据不同的参数,输出不同的结果。下面使用两个数字相加来定义一个带参数的函数。计算结果会直接被输出到屏幕上。
#带参数的函数
def add2Num(a,b):
c = a + b
print(c)
带返回值的函数
函数可以带返回值,结果可以对其它对象进行赋值,可以不进行输出。下面仍然使用两个数字相加来定义带返回值的函数。
#带返回值的函数
def add2num(a,b):
return a + b #通过return来返回运算结果
add2num(11,22)
result = add2num(11,22)
print(add2num(11,22))
print(result)
带多个返回值的函数
函数可以返回多个值,赋值的对象就成了多个。下面采用两个数字相除来定义带多个返回值的函数
#返回多个值的函数
def divid(a,b):
shang = a//b
yushu = a%b
return shang,yushu
sh,yu = divid(5,2)
print("商:%d,余数:%d" % (sh,yu))
print(5/2,5//2,end ='')
函数习题
使用这些习题来检验一下对函数的掌握程度。
-
写一个打印一条横线的函数。(提示:横线是若干个“-”组成)
-
写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数)
-
写一个函数求三个数的和
-
写一个函数求三个数的平均值(提示:调用上面的函数)
习题答案
#1
def ptline():
print('-'*30)
#2
def linenum(n):
for i in range(n):
ptline()
#3
def add3num(a,b,c):
return a+b+c
#4
def avg3num(a,b,c):
return add3num(a,b,c)/3
#执行检验结果
linenum(3) #调用函数2,输出三行分隔线
print(avg3num(1,10,100)) #调用函数4,输出平均值
linenum(3) #再次函数函数2,输出三行分隔线
选择——条件
程序的执行过程中,我们需要根据条件,做不同的处理。常见的有两种场景,一是属于流程中的特殊处理,使用简单if。如长头发的女同志进入车间必须戴上帽子,其他人不做处理。二是对不同的情况,依次做不同的处理,使用复杂的if。如男同志后缀加上先生,女同志后缀加上女士。
简单if
#简单if示例,仅在得分为100分时,输出额外信息。
score = 77
print(score)
if score == 100 :
print("Oh, you are perfect !")
复杂if
#复杂if示例,应该对可能存在的所有情况进行判断。
score = 88
if score >=90 and score<=100:
print('本次考试,成绩为A')
elif score>=80:
print('本次考试成绩为B')
elif score>=70:
print("本次考试成绩为C")
elif score>=60:
print("本次考试成绩为D")
else:
print('本次考试成绩为E')
条件习题
结合if语句相关知识,实现石头,剪子布游戏0(剪刀) 1(石头) 2(布)
用户输入0,1,2。程序返回0,1,2,根据输赢输出不同的结果。
习题答案
#石头剪刀布游戏
#导入生成随机数的函数库
import random
#获取用户输入
player=int(input("请输入你的选择,0(剪刀) 1(石头) 2(布):"))
#判断用户输入有效性
if player>2 or player<0:
print("错误,请输入0(剪刀) 1(石头) 2(布)")
#用户输入有效后,系统出拳,随机生成0,1,2,并输出出拳结果
else:
computer = random.randint(0,2)
if computer == 0 :
print("Computer:剪刀")
elif computer == 1 :
print("Computer:石头")
else :
print("Computer:布")
#判断输赢,从平手,赢,其它情况分情况。
#总共分为3*3共9种情况,3种情况平,3胜,3负。赢的情况为(2,1),(1,0),(0,2)
#输的情况是(1,2),(0,1),(2,0),本例使用比大小,增加(0,2),减少(2,0)的方式表达赢。
if player == computer:
print("平手")
#
elif (player > computer and not (player==2 and computer == 0)) \
or (player==0 and computer == 2):
print("恭喜!你赢了!")
else:
print("哈哈,你输了:)")
重复——循环
至始至终,计算机相对于人来说最大的优势在于可以重复,稳定的执行同一件事,循环就是配置重复任务的方式。Python支持for循环和while循环。
for循环
主流程序语言都有for循环,其逻辑是先定义一个序列,后遍历序列中的每一个参数后,循环结束。Python支持多种方式定义序列,支持range函数,字符串,列表等。
range函数
左闭右开,只输入一个值则表示左区间为0,左区间必须小于右区间。
#单个参数,相当于range(0,5) 省略了0,
for i in range(5):
print(i)
#输出
0
1
2
3
4
#支持配置步长,使用第三个参数
for i in range(0,10,3):
print(i)
#输出
0
3
6
9
字符串、列表
# 支持使用字符串作为序列
name