多线程爬虫

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  这里有一篇比较好的文章,大家可以参考一下。

https://blog.csdn.net/karchar/article/details/52372702

你可能感兴趣的:(多线程爬虫)