标签:
如果你已经掌握了爬虫基础,看了我前面三个基础再来继续看这一篇文章。
这篇文章主要讲解爬虫程序中必须要用到的python集合,如果你对集合很了解。那可以不用看。
在爬虫程序中,为了不重复爬取已经爬过的页面,我们需要把已经爬过的页面的url放进集合中,
在每一次要爬取某一个url之前,先看看集合里面是否已经存在,如果已经存在跳过这个url,如果不存在
我们把ur放进聚合中,然后再去爬取这个页面
python提供了set这种数据结构,set是一种无序的,不包含重复元素的结构,一般用来测试是否
已经包含了某元素,或者对众多元素们去重复。它支持的运算有交、并、差、对称差。像所有的
容器一样,set支持的方法有
x in set,len(set),for x in set
作为一个无序的结构,set不会记录元素的位置,以及元素插入的顺序,因此,set不支持一下方法
不支持(index,slice...)
set中的元素是可变的,改变set中元素的操作可以是add()和remove()。他没有散列值,因此
set不可以被认为是一个字典的key或者自以为其他set的元素
创建一个set可以用set()函数或者花括号{},但是创建一个空集是不能使用一个花括号的,只能用
set()函数,因为一个空的花括号创建的是一个字典数据结构,
先看一些例子吧:
1.1
s1 = {‘girl‘,‘boy‘,‘woman‘,‘man‘,‘older‘,‘child‘,‘man‘}
print(s1)
#结果:
{‘woman‘, ‘boy‘, ‘child‘, ‘man‘, ‘girl‘, ‘older‘}
#通过第一个例子可以看出两点,第一set可以直接去重,第二set元素是无序的
1.2
s1 = {‘girl‘,‘boy‘,‘woman‘,‘man‘,‘older‘,‘child‘,‘man‘}
print(‘girl在s1中吗?‘,‘girl‘ in s1)
print(‘girls在s中吗?‘,‘girls‘ in s1)
#输出是:
girl在s1中吗? True
girls在s中吗? False
1.3
len(s)
s1 = {‘girl‘,‘boy‘,‘woman‘,‘man‘,‘older‘,‘child‘,‘man‘}
print(‘s1有多少元素:‘,len(s1))
输出的:6
显然,len计算了去重之后的元素个数
1.4
关于issubset(),和issuperset()方法
s1 = {‘girl‘,‘boy‘,‘woman‘,‘man‘,‘older‘,‘child‘,‘man‘}
s2 = {‘boy‘,‘woman‘}
s3 = {‘boy‘,‘people‘}
print(s2.issubset(s1)) #s2中的元素是否全属于s1中的元素
print(s3.issubset(s1)) #s3中的元素是否全属于s1中的元素
print(s1.issuperset(s2)) #s2中的元素是否全属于s1中的元素
print(s1.issuperset(s3)) #s3中的元素是否全属于s1中的元素
1.5
s2 = {‘boy‘,‘woman‘}
s3 = {‘boy‘,‘people‘}
s2 |= s3
print(s2) #以上两句话等同于print(s2.union(s3)),去重
set.union(set1,set2,set3...)方法,或者用 set | set2 | set3 |...
取并集
1.6
s2 = {‘boy‘,‘woman‘}
s3 = {‘boy‘,‘people‘}
s2 &= s3
print(s2) #以上两句话等同于print(s2.intersection(s3))
set.intersection(set1,set2,set3...),或者用 set & set2 & set3...
取交集
1.7
s2 = {‘boy‘,‘woman‘}
s3 = {‘boy‘,‘people‘}
s2 -= s3
print(s2) #以上两句话等同于print(s2.difference(s3))
set.difference(set2,set3...),或者用 set - set1 -set2...
存在于set中但是在其他set中不存在元素
1.8
s2 = {‘boy‘,‘woman‘}
s3 = {‘boy‘,‘people‘}
s2 ^= s3
print(s2) #以上两句话等同于print(s2.symmetric_difference(s3))
返回一个新的set,这个set中存放的是,两个set中各自独有的元素
1.9
最后是最基本的增删改
s1 = {‘girl‘,‘boy‘,‘woman‘,‘man‘,‘older‘,‘child‘,‘man‘}
print(s1)
s1.add(‘hello‘)
print(s1)
s1.remove(‘hello‘)
print(s1)
s1.discard(‘man‘)
print(s1)
s1.pop()
print(s1)
s1.clear()
有了这些基础,你就可以进入下一界的学习了,下一节将进一步学习python的正则表达式
钟志远 江苏南京 904727147
标签:
原文地址:http://my.oschina.net/u/2391943/blog/486549