为了有效的学习和加深对于线程和协程的认知,将同一个任务用不同思路呈现很有帮助。
这里通过使用多线程以及协程两种方式对西游记的篇章内容进行爬取,来对比一下两者的耗时差异。
首先,多线程爬取。
这里没有限制并发量,在主函数中的for循环遍历pair,因为有100个p,因此实际上开辟了100个线程。
import threading
import requests
import os
import json
url = 'http://dushu.baidu.com/api/pc/getCatalog?data={"book_id":"4306063500"}'
path = 'xiyouji2'
os.mkdir(path)
def getCatalog(url):
resp = requests.get(url=url)
#print(resp.text)
jsdata = resp.json()
pair = []
for data in jsdata['data']['novel']['items']:
title = data['title']
cid = data['cid']
pair.append((cid,title))
return pair
def download(p):
cid = p[0]
title = p[1]
data = {
"book_id":"4306063500",
"cid":f"4306063500|{cid}",
"need_bookinfo":1
}
data = json.dumps(data)
url = f&