在使用scrapy爬虫做性能优化时,一定要根据不同网站的特点来进行优化,不要使用一种固定的模式去爬取一个网站,这个是真理,以下是对58同城的爬取优化策略:
一、先来分析一下影响scrapy性能的settings设置(部分常用设置):
1,DOWNLOAD_TIMEOUT,下载超时,默认180S,若超时则会被retry中间件进行处理,重新加入请求队列
2019-04-18 20:23:18 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): User timeout caused connection failure: Getting https://bj.58.com/ershoufang/37767297466392x.shtml took longer than 180.0 seconds..
一般来说访问一个网站都是以ms作为单位的,180S确实有些太长了,而且,由于默认设置了最大并发数为16,导致这些request没有下载到东西还一直占据着并发数,在我的日志文件中就能大量看到retry日志
2.DOWNLOAD_DELAY,该选项默认为0,即在下载是并发执行,若设置为x,则每隔 0.5*random~1.5*random 秒下载下一个url,影响当然很大,很多时候还是建议给个正值,避免直接把服务器弄炸了,而且在IP准备不充分情况下,也有利于爬虫的持续运行,对双方都有好处
3.CONCURRENT_REQUESTS ,默认为16,下载器下载的并发数,建议调高,根据scrapy发挥到cpu核心性能80~90%取适应值,若服务器有反爬措施,自身准备IP又不充足情况下,建议调低;
scrapy 是基于 twisted 的异步 IO,只用到单线程,若考虑部署一台服务器专用于爬虫,请选择更高的单核性能,关于scrapy单线程的证明:
设置CONCURRENT_REQUESTS=100,让scr

本文介绍了如何针对58同城网站优化Scrapy爬虫的性能,探讨了DOWNLOAD_TIMEOUT、DOWNLOAD_DELAY、CONCURRENT_REQUESTS等设置的影响,并提出了四种优化策略:减少DOWNLOAD_TIMEOUT、取消DOWNLOAD_DELAY、增加CONCURRENT_REQUESTS以及限制CONCURRENT_REQUESTS_PER_IP。通过实验,发现减少DOWNLOAD_TIMEOUT可以显著提升性能,而其他策略需结合IP有效性进行调整。
最低0.47元/天 解锁文章
1751

被折叠的 条评论
为什么被折叠?



