爬虫请求性能优化——连接池复用、缓存策略、并发控制

📅 2026/7/7 15:08:17 👁️ 阅读次数 📝 编程学习
爬虫请求性能优化——连接池复用、缓存策略、并发控制

爬虫爬得慢往往不是因为网速慢,而是代码没优化好。这一篇讲怎么把爬虫速度提升 5-10 倍——连接复用、缓存去重、智能并发控制。

一、连接池复用

importrequestsfromrequests.adaptersimportHTTPAdapter session=requests.Session()# 配置连接池(默认只有 10 个)adapter=HTTPAdapter(pool_connections=50,# 连接池大小pool_maxsize=100,# 最大连接数max_retries=3,# 最大重试次数pool_block=False)session.mount('http://',adapter)session.mount('https://',adapter)# 现在可以并发发送大量请求而不会频繁建立新连接

二、缓存去重

importhashlibimportredisclassRequestCache:def__init__(self):self.cache=redis.Redis(host='localhost',port=6379,db=1)self.expire=3600# 缓存 1 小时defget(self,url):key=hashlib.md5(url.encode()).hexdigest()data=self.cache.get(key)ifdata:returndata.decode('utf-8')returnNonedefset(self,url,data):key=hashlib.md5(url.encode()).hexdigest()self.cache.setex(key,self.expire,data)

三、并发控制

fromconcurrent.futuresimportThreadPoolExecutor,as_completedimporttimedefcrawl_concurrent(urls,max_workers=10):session=requests.Session()results=[]deffetch(url):resp=session.get(url,timeout=10)returnurl,resp.textwithThreadPoolExecutor(max_workers=max_workers)asexecutor:futures={executor.submit(fetch,url):urlforurlinurls}forfutureinas_completed(futures):url,html=future.result()results.append((url,html))returnresults

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!每周更新 Java/Python/爬虫 实战干货,不让你白来。