一、python与网络爬虫
网络爬虫
它是指着一类程序——自动连接到互联网站点,并读取网页中的内容或者存放在网络上的各种信息,并按照某种策略对目标信息进行采集(如对某个网站的全部页面进行读取)
python语言
python的发展历程
- Guido van Rossum在1989年开发了python语言,他从高级数学语言ABC汲取了大量语法,并从系统编程语言Modula-3借鉴了错误处理机制,将其命名为python(大蟒蛇)。
- python是一种解释型、面对对象、动态数据类型的高级程序设计语言。python开源,遵循GPL(GNU General Public License)协议,对所有开发者完全开放,免费。
python主要数据类型
- Number,数值类型。可以使Integers(如1和2)、Float(如1.1和1.2)、Fractions(如1/2和1/3),或者是Complex Number(数学里的复数)
- String,字符串,主要用于描述文本
- List,列表,一个包含元素的序列
- Tuple,元祖,和列表类似,但其实不可变的
- Set,一个包含元素的集合,其中的元素是无序的
- Dict,字典,由一些键值对构成
- Booleam,布尔类型,其值或为Ture或False
- Byte,字节,例如一个以字节流动的jpg文件
python基本语法
- //表示整除
- **表示幂次
- 使用type关键字获取某个数据的类型
例如:
print(type(1)) # <classs 'int'>
-
分数运算
import fractions # 导入分数模块 a=fractions.Fraction(1,2) b=fractions.Fraction(1,3) print(a+b) # 输出5/6
复数运算
复数可以使用complex(real,imag)或者带有后缀“j”的浮点数来创建
a=complex(1,2)
b=2+3j
print(type(a),type(b)) # <class'complex'><class'complex'>
print(a+b) # (3+5j)
print(a*b) #(-4+7j)
- 布尔类型
python中的布尔类型只有True和False两个常量为值
print(1<2) #True
print(1>2) #False
- 列表(list)
对于列表而言,序列中的每一个元素都在一个固定的位置(称为索引),索引从“0”开始。列表中的元素可以是任何数据类型,python中的列表对应形式是“【】”(有点类似于C语言中的数组)
l1=[1,2,3,4]
print(l1[0]) #通过索引访问元素,输出“1”
print(l1[1]) #输出“2”
print(l1[-1]) #使用负索引值可从列表的尾部向前访问元素
# 任何非空列表的最后一个元素总是list【-1】
列表切片(slice):从列表中提取部分元素的操作,返回值是一个新列表。
l1=[i for i in range(20)] #列表解析语句
#l1中的元素为从0到20(不含20)的所有整数
print(l1)
print(l1[0:5]) #l1的前五个元素
print(l1[15:-1]) #取索引为15的元素到最后一个元素
print(l1[:5]) #取前五个,"0"可以省略
# 如果左切片索引为零,可以将其留空而将零省去,如果右切片索引为列表的长度,也可以将其留空
l2=l1[:] #取所有元素,其实就是复制列表
print(l1[::2]) #指定步数,取所有偶数索引
print(l1[::-1]) #倒着取所有元素
列表中添加新元素的方法
l1=['a']
l1=l1+['b']
print(l1) # ['a','b']
l1.append('c')
l1.insert(0,'x')
l1.insert(len(l1),'y')
print(l1) #['x', 'a', 'b', 'c', 'y']
l1.extend(['d','e'])
print(l1) #['x', 'a', 'b', 'c', 'y', 'd', 'e']
l1.append(['f','g'])
print(l1) # ['x', 'a', 'b', 'c', 'y', 'd', 'e', ['f', 'g']]
extend()接受一个列表,并把其元素添加到原有的列表中类似扩展的意思。append()把参数(参数可能是一个列表)作为一个元素添加到原有的列表中,类似于一个列表中插入另一个列表。insert()将单个元素插入到列表中,其第一个参数是列表插入的位置(索引), 指定位置的插入元素
从类表中删除元素
del l1[0] #根据索引指定列表中的一个元素删除
print(l1)
#['a', 'b', 'c', 'y', 'd', 'e', ['f', 'g']]
l1.remove('a') #根据元素删除, remove()的方法接受一个value参数,并删除列表中第一次出现的该值
print(l1)
# ['b', 'c', 'y', 'd', 'e', ['f', 'g']]
l1.pop(0) # 接受一个特定的索引值进行删除
# ['c', 'y', 'd', 'e', ['f', 'g']]
元祖(tuple)
元祖与列表非常相似,最大的区别在于:
- 元祖是不可修改的定义之后就固定了
- 元祖在形式上使用“()”
元祖操作与列表类似:
t1 = (1,2,3,4,5)
print(t1[0]) # 1
print(t1[::-1]) # (5, 4, 3, 2, 1)
print(1 in t1) # 检查“1”是否在t1中,输出:True
print(t1.index(5)) #返回某个值所对应的元素索引,输出:4
注:元素不可修改是元祖和列表的最大(或者说唯一)的区别,除此之外,列表中修改元素的操作也适用于元祖。
字符串(string)与运用方法
str1 = 'abcd'
print(str1[0]) # a
print(str1[:2]) # ab
str1=str1+ 'efg'
print(str1) # abcdefg
str1 = str1 + 'xyz'*2
print(str1) # abcdefgxyzxyz
# 格式化字符串
print('{} is a kind of {}.'.format('cat','mammal'))
# cat is a kind of mammal
# 显式指定字段
print('{3} is in {2},but {1} is in {0}'.format('china','shanghai','us','newyork'))
# newyork is in us,but shanghai is in china
# 以三个引号标记多行字符串
long_str ='''I love this girl,
but I don't know if she like me,
what I can do is to keep calm and stay alive.
'''
print(long_str)
集合(set)
无序且值唯一,创建集合和操作集合的常见方式包括:
set1 = {1, 2, 3}
l1 = [4, 5, 6]
set2 = set(l1)
print(set1) # {1, 2, 3}
print(set2) # {4, 5, 6}
# 添加元素
set1.add(10)
print(set1) # {10,1,2,3}
set1.add(2) # 无效语句,因为“2”在集合中已经存在
print(set1) # {10,1,2,3}
set1.update(set2) # 类似list中的extend()操作
print(set1) # {1,2,3,4,5,6,10}
# 删除元素
set1.discard(4)
print(set1) # {1,2,3,5,6,10}
set1.remove(5)
print(set1) # {1,2,3,6,10}
set1.discard(20) # 无效语句,不会报错
# set1.remove(20): 使用remove()去除一个并不存在的值时会报错
set1.clear() # 清空集合
print(set1) # set()
set1 = {1, 2, 3, 4}
# 并集、交集与差集
print(set1.union(set2)) # 并集
# {1,2,3,4,5,6}
print(set1.intersection(set2)) # 交集
# {4}
print(set1.symmetric_difference(set2)) # 差集,只在set1或只在set2的元素
字典(dict)
python中的字典是键值对(key-value)的无序集合。字典形式上和集合类似,创建字典和操作字典的基本方法如下:
d1 = {'a':1,'b':2} # 使用“{}”创建
d2 = dict([['apple','fruit'],['lion','animal']]) # 使用diat关键字创建
d3 = dict(name = 'Paris',status = 'alive',location = 'ohio')
print(d1) # {'a': 1, 'b': 2}
print(d2) # {'apple': 'fruit', 'lion': 'animal'}
print(d3) # {'name': 'Paris', 'status': 'alive', 'location': 'ohio'}
# 访问元素
print(d1['a']) #1
print(d3.get('name')) #Paris
# 使用get方法获取不存在的键值时不会触发异常
# 修改字典-添加或更新键值对
d1['c'] = 3
print(d1) #{'a': 1, 'b': 2, 'c': 3}
d1['c'] = -3
print(d1) # {'a': 1, 'b': 2, 'c': -3}
d3.update(name = 'Jarvis',location = 'Virginia')
print(d3) # {'name': 'Jarvis', 'status': 'alive', 'location': 'Virginia'}
# 修改字典-删除键值对
del d1['b']
print(d1) # {'a': 1, 'c': -3}
d1.pop('c')
print(d1) # {'a': 1}
# 获取keys或values
print(d3.keys()) # dict_keys(['name', 'status', 'location'])
print(d3.values()) # dict_values(['Jarvis', 'alive', 'Virginia'])
for k,v in d3.items():
print('{}:\t{}'.format(k,v))
# name: Jarvis
# status: alive
# location: Virginia
逻辑语句
python中表示程序结构的语句不需要用括号括起来(比如“{}”),而是一个冒号结尾,以缩进为语句块。if,else,elif关键词是条件选择语句的关键:
a = 1
if a>0:
print('Positive')
else:
print('Negetive')
# 输出:Positive
b = 2
if b < 0:
print('b is less than zero')
elif b < 3:
print('b is not less than zero but less than three')
elif b < 5:
print('b is not less than three but less than five')
else:
print('b is equal to or greater than five')
# 输出:b is not less than zero but less than three