今天
小帅b要跟你说说增量爬虫
是这样的当你去爬取某个网站的数据时
你会发现这些网站随着时间的推移会更新更多的网页数据
这时候你要爬取的是那些更新的网页数据
而不是又一次爬取整站的内容
对于一些稍微复杂点的网站它们的 url 之间会指来指去
如果你根据 url 的定向去爬取可能会出现这种情况

你的爬虫一直在里面绕圈圈
一直爬取重复的数据
这时候你的爬虫开始陷入了对人生的大思考

那么如何确保爬取的数据不要重复?
接下来就是学习 python 的正确姿势

有朋友说
那就直接用数据库呗
在爬取前
把 url 存入数据库
下次爬取的时候再到数据库里面查询看下这个 url 是否存在数据库
如果存在那就说明这个 url 之前已经被爬取过了
如果不存在就把 url 保存到数据库中
这种方式虽然可行
但是如果数量一多查询速度就会大大降低
从而影响爬取效率了
其实
python 中有一个我们熟悉的数据结构set
set 里面的元素是唯一不重复的所以我们可以将 url 塞进去
下次通过 in 来判断就可以了
因为它的平均复杂度为 O(1)
这样就比数据库的操作高效很多了

但是
这种方式有一个问题使用 python 的 set
是作用于内存的
一旦 url 的数量增多
就会很耗内存

不知道你还记得咱们之前说的这个如果你怕文件被篡改,那就这样做
在这里面咱们说到了 hash
通过散列可以生成唯一的指纹
那么这时候我们可以使用 url 进行 hash比如进行 MD5 加密
由于 MD5 值所占的内存更小 所以可以通过 MD5 来降低 url 的内存
也就是说直接把 url 进行 MD5然后把得到的 MD5 放进 set 就好了
可以做到缩短 url 的长度来降低内存的消耗
当然了
还有与之类似的redis
redis 中也有和 Python 相似的 set我们可以使用它来存储 url 的 MD5
这种缓存数据库的优点在于
它可以作用于硬盘不会有消耗内存的压力
而对于海量数据的情况我们可以考虑使用bloom filter
它的操作方式是这样的
使用 k 个 hash 函数来对集合中的 url 映射成位数组中的 k 个点
然后把他们置 1
下次查询的时候
只要通过 hash 看看这个url 的结果是不是都是 1
如果都是 1这个 url 就可能存在
如果有任何一个 0就说明这个 url 一定不存在
懵逼了?我来画个图吧
一开始是这样的
假设我们集合有 n 个 url

这里初始化了位数组都是0
接着对集合中的 url 都进行 k 个 hash
这里以 url4 为例

可以看到
hash 之后映射到 1
当下次要判断新的 url 是否在集合中的时候就可以使用 hash 去查找

只要发现有 0
那么就说明这个 new_url 一定不存在于集合中
这样的方式可以节省超多的空间提高了空间的利用率
在 python 中早有实现了 bloomfilter 的库pybloom
可以自己定义容量和容错率

使用 add 方法
如果元素存在就直接返回 True
如果不存在就返回 False

此外
还可以使用动态容量的方式

ok通过以上这些方法对于数据的去重相信你应该知道怎么做了
那么
我们下回见啦peace

扫一扫学习 Python 没烦恼

ps:如果你想获取更多小帅b提供的私密非公开且纯净无广告的干货 vip 教程,可以了解一下:跟小帅b一起通往「Python高手之路」

大datatable 内存一直涨_听说你的爬虫一直在整站里循环绕圈圈爬取重复的数据?...相关推荐

  1. 大datatable 内存一直涨_硬盘与内存报价单曝光了,疫情期间该不该给电脑升级?别弄错了...

    电脑硬件升级大家都不陌生了,硬件升级指的是增加硬件或者是更换大容量的硬件来提高电脑的运行速度,升级硬盘与内存条是我们常见的升级方式,因为内存条是可以拆卸的,硬盘也是可以拆卸的,对于其它硬件来说,拆卸相 ...

  2. python爬图片代码大全_爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

    经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢? 所以本节的内容是:数据的可视化.拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工 ...

  3. 大datatable 内存一直涨_DRAM合约价9个月来首跌:内存新一轮降价来袭

    .专于心 精于形. 计划装机或者有升级.囤货内存需求的用户,好日子来了. 从SK海力士的财报来看,Q2季度内存的价格环比还是涨的,所以营收及利润还是大涨.不过好日子也就到此为止了,因为6月份以来内存价 ...

  4. python爬虫今日头条街拍美图开发背景_【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图...

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  5. 如何用python爬取数据_如何使用python爬取知乎数据并做简单分析

    原标题:如何使用python爬取知乎数据并做简单分析 一.使用的技术栈: 爬虫:python27 +requests+json+bs4+time 分析工具: ELK套件 开发工具:pycharm 数据 ...

  6. python爬取去哪网数据_用户观点:企查查数据爬取技术与Python 爬取企查查数据...

    主体数据来源是全国工商信用网但是每个省的工商系统都不同,要针对每个省的工商系统单独写爬虫每个省的验证码也不同,也要单独做.企查查的原理不是主动爬去数据,而是有人查询该企业时,如果自己的数据库没有该企业 ...

  7. python爬取网店数据_如何爬虫天猫店铺数据python

    展开全部 本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店32313133353236313431303231363533e78988e69d8331333365 ...

  8. mysql 查询 系统字段 自然日_吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB...

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  9. python 生意参谋_如何爬取生意参谋数据?是不是违规操作?

    生意参谋是阿里巴巴为商家打造的一站式.个性化.可定制的商务决策体验平台.近期发现,有部分人员使用爬虫爬取生意参谋平台数据,影响商家的用户体验.到底是如何爬取生意参谋数据呢? 官方推荐淘宝.京东.拼多多 ...

最新文章

  1. 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
  2. python常用内置函数总结-python 几个常用的内置函数
  3. PHP Warning: Xdebug MUST be loaded as a Zend extension
  4. 如何使用安装光盘为本机创建yum repository
  5. linux下基于Posix message queue的同步消息队列的实现
  6. 如何管好下属(转载)
  7. Linux批量更改文件后缀名
  8. (Ⅱ)NexT主题的优化定制修改指南
  9. educoder—web:页面元素和属性
  10. Netty高级进阶之基于Netty的Websocket开发网页聊天室
  11. Springboot+Springmvc实现登录拦截(附源码)
  12. npm --save 的含义
  13. 图数据库neo4j的编程语句(详解)
  14. php css下划线,css下划线如何设置?css设置文字下划线的方法介绍
  15. 2014-1普及真题 珠心算测验
  16. IntelliJ IDEA快捷键大全 + 动图演示
  17. MCP3421使用详解
  18. 人工智能数学基础-函数对称
  19. windows mobile POOM
  20. 雷蛇公布2019年全年业绩

热门文章

  1. vue 执行函数this_vue回调函数中this无效
  2. img 隐藏_仙女山美食美景色,那些隐藏在深处角色味香
  3. 周末ROS学习沙龙第二期——自定义消息通信、视频传输、人脸检测、小车动手编程
  4. C语言之预处理探究(四):#、##和预定义宏
  5. java编写正则表达式引擎_从0到1打造正则表达式执行引擎(一)
  6. php hook 键盘,Windows C++ 键盘钩子
  7. seo按天扣费系统_网站seo优化多少钱,SEO快速排名按天扣费怎么样
  8. c语言图像压缩算法实现_kakadu——JPEG2000图像压缩软件的安装和使用
  9. Spring bean作用范围
  10. VSCode 个性化配置快捷键