1.作爬虫的时候为了提升抓取的速度,这个时候就需要开启多个线程同时抓取数据,今天就分享一下如何使用Python中的threading库实现多线程抓取数据
from shop import ShopSpider
import threading
import time
def loop(num1,num2):
# 店铺数据抓取
shop_spider = ShopSpider()
shop_spider.login(num1)
shop_spider.shop_crawl(num2)
shop_spider.close_driver()
# 多线程开启数据抓取
def main(pools):
threads = []
list_t = []
for i in range(0, pools):
t = "t" + f"{i}"
list_t.append(t)
nloops = range(pools)
for i in nloops:
list_t[i] = threading.Thread(target=loop, args=(i,100))
# loop为目标函数名,args为目标函数参数
threads.append(list_t[i])
for i in nloops: # 开始线程
threads[i].start()
time.sleep(1)
for i in nloops: # 等待所有
threads[i].join() # 线程完成
if __name__ == "__main__":
main(2) # main中的参数决定线程数量
这里需要注意的是开启多线程一定要处理好内部的逻辑结构,不然就会出现混乱的情况,比如要使用循环的,第一个线程从0到100遍历,第二个同样的页面也从0到100遍历,这样就会造成混乱,因此使用多线程一定要注意内部的逻辑实现
2.使用scrapy分布式抓取也能提升抓取的效率,这里scrapy就不多说了,不会的可以去我之前的文章中查看,有详细的Scrapy使用方法,后续我也会更新scrapy的进一步使用