大家好,今天小编关注到一个比较有意思的话题,就是关于python学习长文的问题,于是小编就整理了2个相关介绍python学习长文的解答,让我们一起看看吧。
Python爬虫如何优化内存?
我以自己的经验简单谈谈。
长文预警!重点介绍布隆算法
一般来说,爬虫主要从以下几方面优化内存:
1. 大量待爬的request对象或url链接。
a. 保存待爬的request对象比待爬的url有一些好处,但如果不在乎,就以url链接代替request对象,即可优化内存。
b. 先以某些压缩算法进行压缩再保存入队。
出队后先解压再爬取。
2. 大量已爬取的url。
爬虫中显然需要知道哪些url已经爬取过,即url去重。
如果直接保存url显然非常耗内存,因此隆重推荐bloom filter(布隆过滤器)。
a. 先申请m个bit的内存,全部置0
b. ***设S={x1, x2,…,xn},表示n个已爬url指纹特征的***,那么用k个相互独立的哈希函数分别将***中的每个元素映射到{1,…,m}的范围中。
对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。
如上图,m=18,k=3。
对于X1分别映射到第1、5、13个bit的内存中。
对于X2分别映射到第4、11、16个bit的内存中。
对于X3分别映射到第3、5、11个bit的内存中。
c. 在判断y是否属于这个***时,先对y进行k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么就认为y是***中的元素,否则不是***中的元素。
比如对于上图来说,m=18,k=3。
如果h1(y)、h2(y)、h3(y)分别映射到1、11、16,由于这3个位置都是1,那么认为y在***中。
如果h1(y)、h2(y)、h3(y)分别映射到0、11、16,由于这3个位置存在0,那么认为y不在***中。
显然,如果检测结果为是,该元素不一定在***中;
但如果检测结果为否,该元素一定不在***中。
比如,对于上图,k=7,漏失率为0.000112,256M内存即m=256*********8/表中的22=***61万。
意味着k=7时,申请256m的内存,可以对***61万url去重,大约有10932个url会重复Request。
以上是爬虫中耗内存的2个大户。
3. 减少数据库对内存的占用。避免数据库在内存中装载了大量的数据。
比如在爬虫中对mongo数据库检索,可能就会导致mongo数据库加载大量数据。
比如不检索无关的记录或字段
4.善用生成器。生成器天生就是用于内存优化的。
5.防止内存泄露。
内存泄露的工具:gc、objgraph、guppy、pympler、pyrasite等等
如果对你有帮助,请点赞支持
大数据可视化软件和工具有哪些?
1.
FineBIFineBI是一款商业智能BI工具,做数据分析和可视化数据展现,以分析为主,提供多种数据接入方式,可视化功能强大,平台更适合掌握分析方法了解分析的思路的用户,其他用户的使用则依赖于分析师的结果输出...
2.
EchartChartecharts的优点:国产货有语言优势或区域优势。毕竟是中国制造,自己家做出来的,亲和力高,比较适用于我们...
3.
支付宝AntVAntV 是蚂蚁金服的数据可视化解决方案,主要包含「数据驱动的高交互可视化...
到此,以上就是小编对于python学习长文的问题就介绍到这了,希望介绍关于python学习长文的2点解答对大家有用。