网页爬虫的分发模式从垂直化网站到数据化平台

优采云 发布时间: 2022-06-11 18:01

  网页爬虫的分发模式从垂直化网站到数据化平台

  网页爬虫抓取百度图片一直以来以高并发为业界标杆的解决方案,网页爬虫自推出多年来,从未进入更新频率较高的互联网平台,但科技进步、商业模式迭代,从技术上来说,网页爬虫的分发模式已经从垂直化网站到数据化平台。网页爬虫的分发网页爬虫抓取,抓取分发的多种场景,从网页结构来看,仅仅是最简单的页面内容抓取,既通过分词分解数据获取,所以这类场景适合请求非常快,传输数据量又小的网站,比如我们经常碰到的竞价、新闻站点等。

  但随着网站速度的提升,请求变得越来越慢,如果硬要要求完全不抓取的话,那得请求所有页面,则无法承受服务器负荷,平时开发和调试时都会非常不便。所以设计的最高性能的python爬虫,要满足高并发需求,则需要首先满足分段快、分布式等情况。分布式解决方案尽管我们平时设计的解决方案中会用python处理多线程问题,但现在肯定不是每个阶段都需要同时把内容分发到远端服务器上。

  按在python中的用法,可以用:python-sftp获取远端服务器的文件或者日志信息,这是解决分布式首选。更多大的场景可以参考celery这个框架,可以支持很多特定的应用场景。分布式这个设计里,我们也可以使用lvs、zookeeper这类工具,存储http,同样作为分布式的最终一致性。但随着互联网用户的越来越多,解决分布式的方案本身不可避免要出现多版本和并发安全问题,在这里我们提到的最高性能爬虫,我们已经是在分布式项目中有过探索,在分布式项目中,比如目前openresty就提供了大量工具来处理并发安全问题。

  redis从redis来看,它其实分布式处理并发量有些困难,一个是大数据集合并发量相对更高,另一个高并发处理需要庞大的内存,这很可能造成丢失数据或者大量消耗内存,所以理论上看这个解决方案没有问题,但实际业务中不需要那么复杂的并发,于是redis在目前应用不是那么广泛。设计最高性能爬虫,会用redis,但这个问题还是需要解决的,如果考虑架构优化,redis存储http,也同样可以满足高并发量要求。

  http-server的处理在http-server中,爬虫会需要支持http协议和baseurl请求,baseurl方法在redis协议中也是支持的,但需要在http-server的src目录下写入客户端进程ip和端口号,也就是说redis会在redis读写锁中加入一个特殊字段monkeypool,定期修改,其实一个客户端进程是不能连接多个redis进程的,因为主从锁总是竞争的。

  另外还要在post请求中关闭monkeypool。解决思路在proxy的设计理念中,所有的请求都是会放到本地处理,抓包会先对请求做http的压缩。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线