数据提取方法-多进程多线程爬虫

  1. 爬取
    页面的URL是:http://www.qiushibaike.com/8hr/page/1

思路分析:

确定url地址

url地址的规律非常明显,一共只有13页url地址

在这里插入图片描述

确定数据的位置

数据都在id='content-left’的div下的div中,在这个区域,url地址对应的响应和elements相同
在这里插入图片描述

  1. 上述代码改写成多线程方式实现
    2.1 回顾多线程的方法使用
    在python3中,主线程主进程结束,子线程,子进程不会结束

为了能够让主线程回收子线程,可以把子线程设置为守护线程,即该线程不重要,主线程结束,子线程结束

t1 = threading.Thread(targe=func,args=(,))
t1.setDaemon(True)
t1.start() #此时线程才会启动

2.2 回顾队列模块的使用

from queue import Queue
q = Queue(maxsize=100)
item = {}
q.put_nowait(item) #不等待直接放,队列满的时候会报错
q.put(item) #放入数据,队列满的时候回等待
q.get_nowait() #不等待直接取,队列空的时候会报错
q.get() #取出数据,队列为空的时候会等待
q.qsize() #获取队列中现存数据的个数 
q.join() #队列中维持了一个计数,计数不为0时候让主线程阻塞等待,队列计数为0的时候才会继续往后执行
q.task_done() 
# put的时候计数+1,get不会-1,get需要和task_done 一起使用才会-1

2.3 多线程实现思路剖析
把爬虫中的每个步骤封装成函数,分别用线程去执行
不同的函数通过队列相互通信,函数间解耦
在这里插入图片描述

  1. 将上述代码改写成多进程方式实现
    3.1 回顾多进程程的方法使用
from multiprocessing import Process
t1 = Process(targe=func,args=(,))
t1.daemon = True  #设置为守护进程
t1.start() #此时线程才会启动

3.2 多进程中队列的使用
多进程中使用普通的队列模块会发生阻塞,对应的需要使用multiprocessing提供的JoinableQueue模块,其使用过程和在线程中使用的queue方法相同

重点
能够通过多线程多进程实现爬虫
掌握queue中put和get以及task_done和join方法的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值