多线程爬虫
Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;
队列是线程间最常用的交换数据的形式
python下多线程的思考
对于资源,加锁是个重要的环节。因为python原生的list,dict等,都是not thread safe的。而Queue,是线程安全的,因此在满足使用条件下,建议使用队列
- 初始化: class (FIFO 先进先出)
import queue
dataqueue = queue.Queue(maxsize=40)
- 包中的常用方法:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get(block,timeout) 获取队列,timeout等待时间
Queue.put(值) 将一个值放入队列中
#maxsize:指定队列中能够存储的最大的数据量
dataqueue = queue.Queue(maxsize=40)
for i in range(0,50):
if not dataqueue.full():
dataqueue.put(i)
#判断队列是否为空
isempty = dataqueue.empty()
print(isempty)
#判断队列是否存满了
sfull = dataqueue.full()
print(isfull)
#查看对列的大小
size = dataqueue.qsize()
print(size)
#FIFO(先进的先出)
print(dataqueue.get())
步骤
- 创建一个任务队列:存放的是带爬取的url地址
- 创建爬取线程,执行任务的下载
- 创建数据队列:存放爬取线程获取的页面源码
- 创建解析线程:解析html源码,提取目标数据,数据持久化