美文网首页郭志敏的程序员书屋@IT·大数据工具
【170115】2016年,我对爬虫的总结

【170115】2016年,我对爬虫的总结

作者: 林湾村龙猫 | 来源:发表于2017-01-15 14:37 被阅读11559次

都说年末了,该给自己写写总结了。今天我想谈一谈的是我在公司这一年多里的负责的部分工作---爬虫。做了这么久的爬虫,是该写点什么,留下点什么。在我所负责的这一段时间了。我总结了一下大概有以下几类爬虫设计思想。

  • 简单服务器定时爬虫
  • 客户端爬虫
    • lua解析
    • javascript解析
  • 服务器离线爬虫

下面在来细聊以下。

服务器-定时简单爬虫

在最开始的时候,我们做的就是这个。这应该是最简单的爬虫了。搜索引擎搜出来的大概就是这一类了。

这一类的爬虫特点是我只需要爬取一个网站的某一部分数据,发起http请求做html解析,然后存数据库,就完了。比如一些其他网站提供的一些公共数据,或者不要求实时性的数据。如汽车之家的汽车数据,如英雄联盟的英雄数据,如政府网站的某些展示数据。我用过scrapy来抓取dota2的一些数据,后来发现scrapy不一定完全在自己掌控中,我自己写了一个爬虫框架,叫Tspider。我现在做一些简单的爬虫都会用它。基于php的协程与curl_multi_*函数集实现的。单进程可到2000有效处理/min。

这一类的爬虫处理流程大概类似如下


简单爬虫流程图

网上宣传的诸如《xxx抓取淘宝MM照片》、《我从知乎偷取了多少数据》等等爬虫,大概如此。《21天精通xx语言》的既视感。

这一类的爬虫的优点大概就是简单吧。

客户端解析(lua、javascript)

我们公司是做移动端产品的,假如你也恰好是有(android/ios)客户端支持的。并且对数据的实时性要求较高,或者爬数据的时候ip封的太厉害了。可以试试我下面说的方式。我给他取名叫客户端解析

在这一类爬虫中,需要客户端嵌入脚本执行引擎。把http的请求与数据解析放到客户端去执行。最后把数据呈现出来或者上报给服务器。准确度、实时性较高。

客户端解析爬虫
  • 脚本:脚本的作用不过是把对应网站的数据(json、jsonp,html等等)转换为我们需要的数据(格式化数据)。当对方做出改变,我们只需要改变脚本就行。
  • 策略:策略的作用是告诉客户端,你们需要某部分时候,去执行脚本中的哪个方法? 是否需要缓冲?是否需要展示原始网站的内容?等等一些通过服务器控制客户端行为的东西。
  • 离线爬虫:是否需要在服务器爬取,将请求丢给消息队列,离线爬虫系统自己一边玩去。

这种方式至少有两个优点:ip离散,实时性较高。

服务器-离线爬虫系统

对于绝大部分服务,数据的爬取需求,还是需要在服务器完成的。对于这一类的爬虫。架构的设计,需要有很好的扩展性。

服务器离线爬虫
  • 爬取请求从后台控制、对外网关而来。
  • 爬虫触发器,就是通过消息队列告诉爬虫节点啥时候爬,爬谁的数据。
  • 后台控制,可以控制支持哪些网站的数据,告警,异常管理。
  • 消息队列用于分发消息给某个爬虫节点。
  • 爬虫节点:完成具体的爬虫,格式化爬虫数据。支持某个网站的爬取,通常修改此次就行了,这里也需要做好统计,做好告警。
  • 去重:去重可以试试布隆过滤器simhash指纹算法和海明距离比较

思想或叫准则吧

总结一下:

  • 只关心对的,不关心错的。错误的,你永远也枚举不完。
  • 在分层结构中,应该是越往最内层,数据(请求)越小,有效数据(请求)占比越高。
  • 备份思想很重要。如果一台机器挂断的概率是百分之一,两台机器同时挂掉的概率就是万分之一。
  • 没有什么万能钥匙,具体问题,具体分析,具体解决。
  • 没有什么完美的解决方案,有些时候需要根据业务做一些取舍。

最后,感谢我的leader——corey,谢谢!

相关文章

  • 【170115】2016年,我对爬虫的总结

    都说年末了,该给自己写写总结了。今天我想谈一谈的是我在公司这一年多里的负责的部分工作---爬虫。做了这么久的爬虫,...

  • 爬虫的测试方法

    很多同学不知道爬虫应该怎么进行测试,我也是刚接触过一点爬虫测试的小白,通过对爬虫的分析,总结了爬虫的测试方法,有其...

  • Python实战计划学习笔记:week2_1 在MongoDB中

    学习爬虫第二周,对Mongodb进行学习。 代码如下: 运行效果: 数据库情况: 总结: 复习了网页爬虫的相关知识...

  • 资料

    Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更) Python爬虫学习系列教程 Python爬虫学习手册

  • 小小分布式爬虫从架构到实现(一)

    做了一年多的爬虫相关工作了,来总结总结工作吧。 爬虫,是这样开始的…… 首先,为啥要做这个爬虫呢?因为公司在做大数...

  • 爬虫总结 | 爬虫的那点事第一篇

    现在慢慢开始对爬虫的一些工作做一个总结,这是第一篇文章,整理聊下做一个爬虫系统时的一些感悟。 一、在(反)爬虫路上...

  • 170115——关于命运

    关于命运,在我心中一直是个挺神秘的事,每个人来到世上,首先出身就不同,之后的生活境遇会不同,遇到的人也会不同,为什...

  • 170115 减肥日记

    就打个卡 保持减肥状态!

  • 爬虫

    总结爬虫流程:爬取--->解析--->存储什么是爬虫?请求网站并提取数据的自动化程序就叫做爬虫。爬虫的主要目的?是...

  • Python爬虫教程1.1 — urllib基础用法教程

    综述 本系列文档用于对Python爬虫技术的学习进行记录总结。Python 版本是3.7.4 urllib库介绍 ...

网友评论

  • 7f3879b4b815:已拜读
  • 6bf4671977ce:楼主 我想问一下 第一类爬虫你的定时功能是怎么做的?
    林湾村龙猫:@噢瑞利 crontab
  • 6de098b75a36:利用自己的客户端偷跑爬虫。。竟然真的有人做了。。
  • 33c5f1f00db2:谢谢,很有启发,慢慢有了架构的概念。
  • 39bd3c3d98f1:为什么要在客户端执行脚本?我的理解还不如使用Ip代理池来的方便。
  • bac47fee786c:你好,请问你第二部分写的客户端爬虫,是如何将lua脚本嵌入到app中的呢?能给些说明吗?谢谢
  • 开发者头条_程序员必装的App:感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/uel8yh 欢迎点赞支持!
    欢迎订阅《非戈号》https://toutiao.io/subjects/93390
  • ef83686a3569:lua解析是怎么实现的?
  • Awanlon:支持前辈,爬虫小白表示很受用!😁
  • leung0826:hello,你的流程图使用什么软件画的呢?推荐下哦
    leung0826:@leung0826 好
    林湾村龙猫:@林湾村龙猫 simple and free
    林湾村龙猫:chrome app, gliffy
  • 季李可:如果爬虫的时候被发现封ip怎么破?
    季李可:@林湾村龙猫 OK!
    林湾村龙猫:请百度“ip代理”
  • 苏村的南哥:只会抓包。。。:joy:
  • 26517ca81f44:客户端解析这个方案中提到的客户端,主要业务就是爬虫,还是利用用户的设备偷跑数据,如果是这样,感觉下发脚本打补丁这种方案被乱用了,有点不厚道
    林湾村龙猫:不是偷跑数据,只是用户需要什么数据请求什么数据。自己解析完了,上报一份到服务器做缓存而已。跟你去拉取正常官网的资源消耗是差不多的。
  • Howborn:不错呦。
  • 冰冰的冻结:你是用什么语言做爬虫的呢 我喜欢用java 语言 不知道可不可以实现
    林湾村龙猫:@冰冰的冻结 慢慢来,业务驱动技术的推进,分页的一般爬取目标网站都有分页参数的,具体问题具体分析,动态网页,前后端分离么?这一般都是以json,jsonp的形式返回的,如果是具体的执行js生成的,要么把他的js翻一遍,要么找个js执行引擎。
    冰冰的冻结:@林湾村龙猫 我现在也只会简单的 你说的复杂的 不太会 还有一些分页的 不知道怎么做 再有就是动态页面的
    林湾村龙猫:任何语言都可以,不过python更适合做爬虫
  • 715238827d27:有时间,看看你的框架好用不!😌
    林湾村龙猫:@c化城 可以看看PHP的协程咋玩的
  • 昵称居然都被用了:不错不错,我还停留在第一阶段

本文标题:【170115】2016年,我对爬虫的总结

本文链接:https://www.haomeiwen.com/subject/womybttx.html