Python网络爬虫

一、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)

元祖与列表非常相似,最大的区别在于:

  1. 元祖是不可修改的定义之后就固定了
  2. 元祖在形式上使用“()”

元祖操作与列表类似:

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 1. 概述 本文主要介绍网络爬虫,采用的实现语言为Python,目的在于阐述网络爬虫的原理和实现,并且对目前常见的...
    Lemon_Home阅读 2,741评论 0 21
  • 本文为《爬着学Python》系列第九篇文章。 从现在开始算是要进入“真刀真枪”的Python学习了。之所以这么说,...
    SyPy阅读 2,139评论 0 14
  • 1 前言 作为一名合格的数据分析师,其完整的技术知识体系必须贯穿数据获取、数据存储、数据提取、数据分析、数据挖掘、...
    whenif阅读 18,068评论 45 523
  • 一 高可用架构设计 配置说明:zookeeper x 3 + canal x 2 + mysql x 2 组件说明...
    GuangHui阅读 2,334评论 1 7
  • 在肿瘤内科实习时遇到过一位姓钟的大叔。钟大叔62岁,高高瘦瘦,是一名司机。他对于肿瘤有很多错误的认识,并且非常固执...
    阿超双螺旋阅读 187评论 5 1