python多线程queue_python多线程+队列(提高爬虫时效性)
#仅供学习使用,如有侵权请留言删除
from queue import Queue
import requests
from bs4 import BeautifulSoup
import time
import threading
q = Queue()
'''
队列使用,
.queue 查看队列内容
.get() 获取队列内容
.put()添加队列内容
'''
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"
}
#生产者
def req_list_page():
'''
请求文章列表
:return:
'''
#判断队列是否为空
print("生产者")
print("获取首页内容,获取link添加队列中")
for i in range(1,3):
url = 'https://club.autohome.com.cn/o/bbs/forum-c-4410-{}.html#pvareaid=6830274'.format(i)
res = requests.get(url,headers=headers).text
soup =BeautifulSoup(res,'lxml')
for item in soup.select('dl[class="list_dl"]') :
# print(item)
try:
link = 'https://club.autohome.com.cn'+item.select('dt > a')[0].get('href')
q.put(link)
except :
pass
print("初始队列状态")
# print(q.queue)
print(q.qsize())
time.sleep(3)
#消费者
def req_info_page():
'''
:return:
'''
while True:
#当队列没有内容了则终止
if q.empty():
break
else:
print("消费者")
link = q.get()
print("请求了:{}".format(link))
# print(q.queue)
print(q.qsize())
time.sleep(1)
print(1111)
if __name__ == '__main__':
start = time.time()
#创建线程,一个生产,两个消费
product = threading.Thread(target=req_list_page)
consume1 = threading.Thread(target=req_info_page)
consume2 = threading.Thread(target=req_info_page)
consume3 = threading.Thread(target=req_info_page)
consume4 = threading.Thread(target=req_info_page)
consume5 = threading.Thread(target=req_info_page)
#启动线程
#获取所有link(生产者)
product.start()
product.join()
#同时消费5个队列内容
consume1.start()
consume2.start()
consume3.start()
consume4.start()
consume5.start()
#设置守护线程,子线程执行完毕,主线程结束
consume1.join()
consume2.join()
consume3.join()
consume4.join()
consume5.join()
end = time.time()
print('总消耗时间:',end-start)
python多线程queue_python多线程+队列(提高爬虫时效性)相关推荐
- python3多线程queue_Python多线程(3)——Queue模块
Queue模块支持先进先出(FIFO)队列,支持多线程的访问,包括一个主要的类型(Queue)和两个异常类(exception classes). Python 2 中的Queue模块在Python ...
- Python+正则表达式编写多线程百度贴吧网页爬虫
其实本来是想做一个利用Python+XPath的贴吧爬虫,但是遇到了一些很奇怪的问题搞了一天也没有解决,所以只有用简单的正则表达式来代替XPath. 这个小爬虫是用于爬取一个帖子所有的回帖人+回帖内容 ...
- python多线程爬取段子_Python爬虫实例-多线程爬虫糗事百科搞笑内涵段子
学习爬虫,其乐无穷! 今天给大家带来一个爬虫案例,爬取糗事百科搞笑内涵段子. 爬取糗事百科段⼦,假设⻚⾯的 URL 是:http://www.qiushibaike.com/8hr/page/1 一. ...
- 一文看懂Python多进程与多线程编程(工作学习面试必读)
进程(process)和线程(thread)是非常抽象的概念, 也是程序员必需掌握的核心知识.多进程和多线程编程对于代码的并发执行,提升代码效率和缩短运行时间至关重要.小编我今天就来尝试下用一文总结下 ...
- python多进程和多线程看这一篇就够了
脑海中关于进程和线程的概念一直很模糊,什么时候该用多进程,什么时候该用多线程总是搞不清楚.同时python因为历史遗留问题存在GIL全局锁,就让人更加困惑.这一篇就完整整理一下python中进程和线程 ...
- Python中的多线程
Python中的多线程 文章目录 Python中的多线程 一.线程介绍 1.什么是线程 2.为什么要使用多线程 3.多线程的优点 二.线程实现 1.**`普通创建方式`** 2.**`自定义线程`** ...
- python3 多线程_Python3多线程爬虫实例讲解
多线程概述 多线程使得程序内部可以分出多个线程来做多件事情,充分利用CPU空闲时间,提升处理效率.python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点, ...
- python web框架 多线程和多进程_python的多线程和多进程(一)
在进入主题之前,我们先学习一下并发和并行的概念: --并发:在操作系统中,并发是指一个时间段中有几个程序都处于启动到运行完毕之间,且这几个程序都是在同一个处理机上运行.但任一时刻点上只有一个程序在处理 ...
- 【干货】python多进程和多线程谁更快
python多进程和多线程谁更快 python3.6 threading和multiprocessing 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为G ...
最新文章
- 一句话后门中eval和assert的区别
- 条款39:明智而审慎的使用private继承
- 使用maven编译YCSB0.1.4对cassandra进行性能测试
- 限制连接数上涨的几个关键因素
- leetcode 316. 去除重复字母(单调栈)
- vue-router实现SPA购物APP基本功能
- amd的处理器能兼容idea么_AMD新一代CPU不向下兼容,究竟意味着什么?
- android结束进程,卧薪尝胆70天内推入职阿里,附答案
- 百度贴吧里如何留网址
- 计算机英语二国家线,历年考研英语国家线一览表
- MarkDown 编辑器字体改颜色大小等常用操作
- idv和vdi的优劣势_桌面虚拟化中VDI与IDV的区别?
- Python(爬虫篇)--- 破解加密【一】JS加密破解
- lammps案例:分子自由落体运动模拟
- 计算机软件授权使用协议,软件许可使用协议
- Spring Security 配置白名单访问后,仍然报错403
- 西安的IT要怎么才能发展?
- 模拟微信发送文件给好友/群
- Python爬虫新手入门教学(十八):爬取yy全站小视频
- prim算法c语言,Prim算法(一)之 C语言详解
热门文章
- linq to sql 行转列_n套SQL面试题--行转列、留存、日活等
- 清爽登录界面html,基于css3实现扁平简洁清爽的登录注册页面代码
- python中if continue else,python基础;if else;for;while 分支处理.continue,break
- mysql 物化视图_Mysql物化视图应用
- 安徽大学计算机科学与技术学院刘峰,刘峰
- 【大数据】0002---MongoDB集群自动分离创建新集群
- kubernetes实战篇之dashboard搭建
- Selenium---环境配置
- (转载)Mac系统下利用ADB命令连接android手机并进行文件操作
- HDU 4003 Find Metal Mineral