python爬虫多线程编程
#使用了线程库
import threading
from queue import Queue
from bs4 import BeautifulSoup
import json
import requests
class ThreadCrawl(threading.Thread):
def __init__(self,threadNmae,pageQueue,dataQueue):
#threading.Thread.__init__(self)
#多个父类的话下面这个方便
super(ThreadCrawl,self).__init__( )
self.threadNmae=threadNmae
self.pageQueue=pageQueue
self.dataQueue=dataQueue
self.headers={
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
def run(self):
print("启动"+self.threadNmae)
while not CRAWL_EXIT:
try:
#取出一个数字,先进先出
#1可选参数block默认值是true,不会结束,会进入阻塞状态,直到队列有新的数据
#2.如果队列为空,block为Flase的话,就会弹出一个Queue.empty()异常
page=self.pageQueue.get(False)
url="https://www.qiushibaike.com/8hr/page/"+str(page)+"/"
content=requests.get(url,headers=self.headers)
self.dataQueue.put(content)
except:
pass
print("结束"+self.threadNmae)
CRAWL_EXIT=False
PARSE_EXIT=False
def main():
#页面的队列可以存储10页
pageQueue=Queue(10)
#放入1-10 先进先出
for i in range(1,11):
pageQueue.put(i)
#采集结果的数据队列,参数为空
dataQueue=Queue()
#存储三个线程采集的名字
crawList=["采集线程1号","采集线程2号","采集线程3号"]
#存储三个采集线程
threadcrawl=[]
for threadNmae in crawList:
thread=ThreadCrawl(threadNmae,pageQueue,dataQueue)
thread.start()
threadcrawl.append(thread) while not pageQueue.empty():
pass
global CRAWL_EXIT
CRAWL_EXIT=True
print("Queue为空")
for thread in threadcrawl:
thread.join()
print("joining...............")
if __name__=="__main__":
main()
python爬虫多线程编程的更多相关文章
- Python的多线程编程
提到多线程,很多人就会望而却步,本文将由浅入深地带你攻克python多线程编程,并防止你跳入深坑, 首先看一段简单的代码: from time import ctime,sleep def play_ ...
- python --- 基础多线程编程
在python中进行多线程编程之前必须了解的问题: 1. 什么是线程? 答:线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程 ...
- 【转】使用python进行多线程编程
1. python对多线程的支持 1)虚拟机层面 Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势.使 ...
- Python爬虫 | 多线程、多进程、协程
对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了 ...
- Python:多线程编程
1.IO编程 IO(input/output).凡是用到数据交换的地方,都会涉及io编程,例如磁盘,网络的数据传输.在IO编程中,stream(流)是一种重要的概念,分为输入流(input strea ...
- python爬虫——多线程+协程(threading+gevent)
上一篇博客中我介绍了如何将爬虫改造为多进程爬虫,但是这种方法对爬虫效率的提升不是非常明显,而且占用电脑cpu较高,不是非常适用于爬虫.这篇博客中,我将介绍在爬虫中广泛运用的多线程+协程的解决方案,亲测 ...
- 静听网+python爬虫+多线程+多进程+构建IP代理池
目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip ...
- 【Python】多线程编程
1.thread模块 2.threading模块 3.Queue模块与多线程互斥 简介: thread和threading模块允许创建和管理线程,thread模块提供了基本的线程和锁的支持,而thre ...
- python 爬虫 多线程 多进程
一.程序.进程和线程的理解 程序:就相当于一个应用(app),例如电脑上打开的一个程序. 进程:程序运行资源(内存资源)分配的最小单位,一个程序可以有多个进程. 线程:cpu最小的调度单位,必须依赖 ...
随机推荐
- C++函数中的那些坑
平时写程序时,我们可能或多或少对一些用法感到朦胧,下面我对一些易困惑大家,或者易用错的地方作点介绍. 一.函数的一些注意点 1.函数返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针. 2 ...
- BZOJ4892 Tjoi2017dna(后缀数组)
对每个子串暴力匹配至失配三次即可.可以用SA查lcp.然而在bzoj上被卡常了.当然也可以二分+哈希或者SAM甚至FFT. #include<iostream> #include<c ...
- 【纪念】NOIP2018前夕——一些想说的话
刚刚复习了一下相关的内容,决定一会儿就洗洗睡了.在睡觉之前,决定写点东西. 有的时候真的很迷茫,选择了一条超过自己能力范围的路,每天挣扎在各种各样难题的面前,文化成绩一落千丈……在从前觉得这一切都是有 ...
- IOS中手势UIGestureRecognizer
通常在对视图进行缩放移动等操作的时候我们可以用UIScrollView,因为它里边自带了这些功能,我们要做的就是告诉UIScrollView的几个相关参数就可以了 但是没有实现旋转的手势即UIRota ...
- Flash 0day CVE-2018-4878 漏洞复现
0x01 前言 Adobe公司在当地时间2018年2月1日发布了一条安全公告: https://helpx.adobe.com/security/products/flash-player/aps ...
- 排座位&&Little Elephant And Permutation——排列dp的处理
排列的问题,就是要把序列排个序,使之达到某种最优值或者统计方案数 dp可以解决部分排列问题. 通常的解决方案是,按照编号(优先级)排序决策,从左到右决策两种. 这里主要是第一个. 排座位• 有
- 使图片水平并垂直居中的一个Hack
淘宝的一个前端面试题:使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中. 想起了vertical-align:middle;但是不行,后来才知道还要di ...
- Hdu5693 D Game
D Game Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K
传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...
- 中南多校对抗赛 第三场 B
B:Arithmetic Progressions 题意: 给你一个长度为n的序列,问你这个序列中长度最长的等差数列长度为多少 题解: 方法一:将数组从小到大排序,n方扫,枚举出公差d,然后二分找有多 ...