Python爬虫学习(二)用到的数据结构
来源:互联网 发布:import 引入js 编辑:程序博客网 时间:2024/06/06 16:21
Python的队列
在爬虫程序中, 用到了广度优先搜索(BFS)算法. 这个算法用到的数据结构就是队列.
Python的List功能已经足够完成队列的功能, 可以用 append() 来向队尾添加元素, 可以用类似数组的方式来获取队首元素, 可以用 pop(0) 来弹出队首元素. 但是List用来完成队列功能其实是低效率的, 因为List在队首使用 pop(0) 和 insert() 都是效率比较低的, Python官方建议使用collection.deque来高效的完成队列任务.
from collections import dequequeue = deque(["Eric", "John", "Michael"])queue.append("Terry") # Terry 入队queue.append("Graham") # Graham 入队queue.popleft() # 队首元素出队#输出: 'Eric'queue.popleft() # 队首元素出队#输出: 'John'queue # 队列中剩下的元素#输出: deque(['Michael', 'Terry', 'Graham'])
Python的集合
在爬虫程序中, 为了不重复爬那些已经爬过的网站, 我们需要把爬过的页面的url放进集合中, 在每一次要爬某一个url之前, 先看看集合里面是否已经存在. 如果已经存在, 我们就跳过这个url; 如果不存在, 我们先把url放入集合中, 然后再去爬这个页面.
Python提供了set这种数据结构. set是一种无序的, 不包含重复元素的结构. 一般用来测试是否已经包含了某元素, 或者用来对众多元素们去重. 与数学中的集合论同样, 他支持的运算有交, 并, 差, 对称差.创建一个set可以用 set() 函数或者花括号 {} . 但是创建一个空集是不能使用一个花括号的, 只能用 set() 函数. 因为一个空的花括号创建的是一个字典数据结构. 以下同样是Python官网提供的示例.
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}>>> print(basket) # 这里演示的是去重功能{'orange', 'banana', 'pear', 'apple'}>>> 'orange' in basket # 快速判断元素是否在集合内True>>> 'crabgrass' in basketFalse >>> # 下面展示两个集合间的运算....>>> a = set('abracadabra')>>> b = set('alacazam')>>> a {'a', 'r', 'b', 'c', 'd'}>>> a - b # 集合a中包含元素{'r', 'd', 'b'}>>> a | b # 集合a或b中包含的所有元素{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}>>> a & b # 集合a和b中都包含了的元素{'a', 'c'}>>> a ^ b # 不同时包含于a和b的元素{'r', 'd', 'b', 'm', 'z', 'l'}
Python的正则表达式
在爬虫程序中, 爬回来的数据是一个字符串, 字符串的内容是页面的html代码. 我们要从字符串中, 提取出页面提到过的所有url. 这就要求爬虫程序要有简单的字符串处理能力, 而正则表达式可以很轻松的完成这一任务.
Python正则表达式阅读全文
0 0
- Python爬虫学习(二)用到的数据结构
- 【Python学习笔记(三)】:爬虫用到的知识点总结
- 在学习python网络爬虫时用到的正则表达式
- Python爬虫学习篇——————网络爬虫用到的库
- Python爬虫学习(简单的模拟登陆(二))
- Python 爬虫学习稿(二)
- 学习python写网络爬虫(二)
- python 爬虫学习二(Scrapy讲解)
- Python爬虫学习(单线程爬虫(二))
- 【Python学习】Python写爬虫时用到的相对路径和绝对路径--urljoin
- 学习python(二) 数据结构
- python 爬虫(二)
- python爬虫(二)
- python爬虫(二)
- Python 爬虫(二)
- 网页爬虫及其用到的算法和数据结构
- 网页爬虫及其用到的算法和数据结构
- 网页爬虫及其用到的算法和数据结构
- 用例图、类图与时序图的关系
- 教你解决Android Studio无法查看源码
- HBase中应该如何合理设置客户端Write Buffer
- js声明函数(function)和变量(variable)不得不防的坑
- 表空间、段、区、块
- Python爬虫学习(二)用到的数据结构
- 算法_随机算法1_入门引例(根据随机数求圆周率pi)
- vue .sync 修饰符
- linux shell awk 流程控制语句(if,for,while,do)详细介绍
- java 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列
- 1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍
- ID生成方案
- oracle主键的自动生成
- iOS “深挖”单例模式