开篇寄语
之前,伯衡君介绍了Python的一些基础知识,命名和循环判断,具体可以参看下方的前情提要,本篇文章则是继续沿着上篇继续探索接下来的内容,也就是list和tuple等,分享给大家。
前情提要
内容详情
python数据结构
数据结构是存放数据的容器,Python有4种基本数据结构,包括列表、字典、元组和集合。
列表
在爬虫实战中,使用最多的就是列表数据结构,不论是构造出的多个URL,还是爬取到的数据,大多数都为列表数据结构。下面首先介绍列表最显著的特征:
- 列表中的每一个元素都是可变的。
- 列表的元素都是有序的,也就是说每个元素都有对应的位置(类似字符串的切片和索引)。
- 列表可以容纳所有的对象。
- 列表中的每个元素都是可变的,这意味着可以对列表进行增、删、改操作,这些操作在爬虫中很少使用,因此这里不再给读者添加知识负担。
- 列表的每个元素都有对应的位置,这种用法与字符串的切片和索引很相似。
list = ['peter', 'lilei', 'wangwu', 'xiaoming'] print(list[0]) print(list[2:]) #打印结果 #peter #['wangwu', 'xiaoming']
如果为切片,返回的也是列表的数据结构。
列表可以容纳所有的对象,如下面所示:
list = [ 1, 1.1, 'string', print(1), True, [1, 2], (1, 2), {'key', 'value'} ]
列表中会经常用到多重循环,因此读者有必要去了解和使用多重循环。现在,摆在读者面前有两个列表,分别是姓名和年龄的列表:
names = ['xiaoming','wangwu','peter'] ages = [23,15,58]
这时可以通过多重循环让name和age同时打印在屏幕上:
names = ['xiaoming','wangwu','peter'] ages = [23,15,58] for name, age in zip(names, ages): print(name,age) #输出结果 #xiaoming 23 #wangwu 15 #peter 58
注意:多重循环前后变量要一致。
在爬虫中,经常请求多个网页,通常情况下会把网页存到列表中,然后循环依次取出并访问爬取数据。这些网页都有一定的规律,如果是手动将这些网页URL存入到列表中,不仅花费太多时间,也会造成代码冗余。这时可通过列表推导式,构造出这样的列表,例如某个网站每页的URL是这样的(一共4页):
https://www.luckydesigner.space/javascriptcode/page/1/ https://www.luckydesigner.space/javascriptcode/page/2/ https://www.luckydesigner.space/javascriptcode/page/3/ https://www.luckydesigner.space/javascriptcode/page/4/
通过以下代码即可构造出4页URL的列表数据:
urls = ['https://www.luckydesigner.space/javascriptcode/page/{}/'.format(number) for number in range(1,5)] for url in urls: print(url)
通过一行代码即可构造出来,通过for循环打印出每个URL。
字典
Python的字典数据结构与现实中的字典类似,以键值对('key'-'value')的形式表现出来。本文中只讲解字典的创造,字典的操作在后面会详细介绍。字典的格式如下:
user_info = { 'name':'xiaoming', 'age':'23', 'sex':'man' }
注意:插入数据库需用字典结构。
元组和集合
在爬虫中,元组和集合很少用到,因此这里只做简单介绍。元组类似于列表,但是元组的元素不能修改只能查看,元组的格式如下:
tuple = (1,2,3)
集合的概念类似数学中的集合。每个集合中的元素是无序的,不可以有重复的对象,因此可以通过集合把重复的数据去除。
list = ['xiaoming','zhangyun','xiaoming'] set = set(list) print(set) #打印结果 {'zhangyun', 'xiaoming'}
注意:集合是用大括号构建的。
进阶玩法
当掌握到一定程度后,就可以参看以下文章来进行爬虫啦:
- 我的微信
- 微信扫一扫加好友
- 我的微信公众号
- 扫描关注公众号