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

爬虫请求性能优化——连接池复用、缓存策略、并发控制
爬虫爬得慢往往不是因为网速慢而是代码没优化好。这一篇讲怎么把爬虫速度提升 5-10 倍——连接复用、缓存去重、智能并发控制。一、连接池复用importrequestsfromrequests.adaptersimportHTTPAdapter sessionrequests.Session()# 配置连接池默认只有 10 个adapterHTTPAdapter(pool_connections50,# 连接池大小pool_maxsize100,# 最大连接数max_retries3,# 最大重试次数pool_blockFalse)session.mount(http://,adapter)session.mount(https://,adapter)# 现在可以并发发送大量请求而不会频繁建立新连接二、缓存去重importhashlibimportredisclassRequestCache:def__init__(self):self.cacheredis.Redis(hostlocalhost,port6379,db1)self.expire3600# 缓存 1 小时defget(self,url):keyhashlib.md5(url.encode()).hexdigest()dataself.cache.get(key)ifdata:returndata.decode(utf-8)returnNonedefset(self,url,data):keyhashlib.md5(url.encode()).hexdigest()self.cache.setex(key,self.expire,data)三、并发控制fromconcurrent.futuresimportThreadPoolExecutor,as_completedimporttimedefcrawl_concurrent(urls,max_workers10):sessionrequests.Session()results[]deffetch(url):respsession.get(url,timeout10)returnurl,resp.textwithThreadPoolExecutor(max_workersmax_workers)asexecutor:futures{executor.submit(fetch,url):urlforurlinurls}forfutureinas_completed(futures):url,htmlfuture.result()results.append((url,html))returnresults 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。