python多线程爬虫

#多线程爬虫一般思维就是,开启两个线程,一个爬,一个取。
#实现步骤
#1,把自己思路的裤架给配置出来,两个线类,一个主方法。
#思考,改把数据存到什么结构里。。。。。队列。
import re
import threading
import queue
from urllib import request
import time

#爬取线程
class Thread1(threading.Thread):
def init(self,threadName,pagequen,dataquen):
threading.Thread.init(self)
self.threadName=threadName
self.pagequen=pagequen
self.dataquen=dataquen
self.headers={
“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36”
}#配置一些爬虫需要的条件
def run(self):
while not flag:
try:
page = self.pagequen.get()#从页码中拿出一个值
url=“你的url”+page#这块是你要构造的url,明白?
res=request.Request(url,headers=self.headers)
html=request.urlopen(res).read().decode()#拿到网页的源码,爬取包有好几种,记住,就是要拿到网页源码
#这是爬取的基本,
time.sleep(0.1)#休息一会,等拿到在放到队列。
self.dataquen.put(html)
#把数据放到数据队列,就算完成任务。
except Exception as e:
pass
pass
#清洗线程
class Thread2(threading.Thread):
def init(self,threadName,dataquen,filename):#清洗使用到的数据
threading.Thread.init(self)
self.threadName=threadName
self.dataquen = dataquen
self.filename = filename
def run(self):
while not flag2:
try:
data=self.dataquen.get();
result=re.compile(“匹配条件”).findall(data)#清洗的办法有很多种我就用正则模拟一下
self.filename.write(result)#写文件,目的达到,去主函数写完流程
except Exception as e:
pass

#主方法
flag=False#配置两个判断中间值
flag2=False
def mian():
pagequeue=queue.Queue(10)#创建页码队列,10是加入10个数据
for i in range(1,11):
pagequeue.put(i)#把1到10 个数加入到队列
dataquen=queue.Queue()#创建数据空列里。
#下面是你的业务逻辑代码,自己思考着写
filename=open(“text.txt”,“a”)#我演示的是我想把数据追加写到TXT文件里。没有具体作用只是演示
#开始启动线程和使用上面的两个类,先启动爬的线程。
t1=Thread1(“采”,pagequeue,dataquen)
t1.start()
t2=Thread1(“洗”,pagequeue,dataquen)
t2.start()
#各自工作
while not pagequeue.empty():#没有还有页码就停这里,while,有时做为阻塞作用
pass
#到这里时就证明pagequeue为空
global flag#全局变量
global flag2
flag=True#结合上面的判断条件,理解,停了爬虫线程
while not dataquen.empty():#同例
pass
flag2=True
t1.join()
t2.join()
print(“结束爬虫”)
#入口
if name==“main”:
mian()
#样速度确实快很多,可以按照这框架原来,开多点线程,提高你爬虫的速度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tiny(泰尼)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值