1、多线程爬虫,可考虑放到线程池,把我们需要解析的URL 地址存入我们的队列中,然后去触发多线程进行操作、
代码如下
class BaiDuT:
#获取URL
def __init__(self):
self.Lock=threading.Lock()
#创建一个线程池
self.url_queue=queue.Queue()
for iin range(1,21):
url_spider="https://tieba.baidu.com/f?kw=文字控&ie=utf-8&pn="+str(i*50)
self.url_queue.put(url_spider)
print(self.url_queue.queue)
def spider(self):
while self.url_queue.qsize()>0:
#我们对可能出现冲突的地方上锁
if self.Lock.acquire():
url=self.url_queue.get()
print('剩余数量:%s;处理的线程编号:%s'%(self.url_queue.qsize(),threading.current_thread().name))
#写具体的爬虫代码
self.Lock.release()
if __name__ =='__main__':
c=BaiDuT()
my_thread=[]
for iin range(0,3):
thread2=threading.Thread(target=c.spider)
thread2.start()
my_thread.append(thread2)
for tin my_thread:
t.join()
中间有可能会出现资源冲突的问题,所以这个时候我们应该加锁,防止此类问题。
锁分为两种:lock Rlock 这里有一篇比较好的文章,大家可以参考一下。