当前位置: 首页 > news >正文

seo网站建设步骤住房和成乡建设部网站

seo网站建设步骤,住房和成乡建设部网站,大同推广型网站开发,志鸿优化设计答案网今天带来一个有意思的东西-分布式B站爬虫任务系统 这个小玩意源于上周在研究Azure的时候#xff0c;发现云服务厂商都在推荐轻量级的存储队列服务#xff0c;用来取代原有的比较重的消息队列服务#xff0c;具体来说#xff0c;比如阿里云就推荐使用消息服务替代消息队列发现云服务厂商都在推荐轻量级的存储队列服务用来取代原有的比较重的消息队列服务具体来说比如阿里云就推荐使用消息服务替代消息队列在Azure中就有一个轻量级的存储队列Storage Queue可以替代服务总线Service Bus简单试用了一下Azure的Storage Queue后发现这玩意很好用于是决定全面的深入研究一下再将公司电商系统内的相关任务处理均重构成使用存储队列服务而深入研究得找个案例呀于是就想到了做个分布式爬虫此类应用会出现大量的任务场景而正好前段时间下载B站视频时找到一个网站叫唧唧下载搞二次元的都是色情狂吗但又不太好用于是决定就做个比较全面的B站视频爬虫。一方面可以方便的下载视频另一方面还可以当做公司开发人员的教学案例 老规矩还是先看下最终的使用效果应用入口https://www.alphams.cn/LT为了防止滥用下载以及记录下载所以还麻烦注册一下啦 输入视频番号点击下载就进入任务界面 任务界面可以看到视频信息实时下载信息和错误信息 任务处理完成后点击立即下载从一个CDN加速的地址得到了视频 那么下面就把本次的开发和实施流水账记录一下 1、首先是准备工作和可行性调研 想要对B站进行爬虫首先要准备好技术手段和相关工具对B站的网站结构和数据流向进行一些分析进行可行性的调研 首先打开B站任意一个视频可以看到地址都是这样的格式 于是我们把AV后面的号码叫做番号此番号非老司机番号 而有些视频不止一段如果是第二段视频则是这个地址 而如果把Index后面的2换成1也可以达到和第一个地址一样的效果 然后用Fidder工具分析一下网页可以看到有如下一些资源 剔除基本的JS文件、CSS文件、图像文件后剩下来的就是一些有用的信息了而在有用的信息中最终筛选出如下几个信息 1、AID是视频的番号也就是网址URL后面的那串唯一数字 2、CID是弹幕的番号每个视频AID会对应一个CID 3、弹幕的信息存储在了这样的URL中http://comment.bilibili.com/15075110.xml 4、视频的信息存储在了这样的URL中https://interface.bilibili.com/playurl?cid15075110appkey84956560bc028eb7otypejsontypequality3signc070bfd93a84cab542e7c874add6839e 因为本次主要是下载视频所以就着重看一下视频存储的信息打开上面的URL后发现了最终视频的地址 太好了一下子就给了视频尺寸和视频最终的下载地址那么我们用浏览器打开一下这个URL看一下可以成功下载 注以上相关分析实际上是经过了1-2个小时的反复尝试和模拟得出的有2个细节补充一下1、B站的服务器会根据HTTP头信息的不同返回FLV格式或者MP4格式2、B站的视频可能用了不同厂商的CDN服务有些视频地址无法直接下载会判断refer信息和浏览器信息 接下来继续分析注意看这个URL可以发现尾部有一个sign说明做了客户端和服务端的签名验证并不是很傻瓜的有直接通过AID或者CID关联的下载地址分析进入到这一步后我很快的就打了自己的脸我曾在文章《关于.NET玩爬虫这些事》中说过一切网站行为都可以分析出HTTPJavascript来只要分析得当根本不需要用浏览器来进行爬虫模拟但这尼玛B站鬼的Web结构忍不住想骂人典型的垃圾Python、PHP向的开发人员做出来的鬼东西代码逻辑混乱、随便一看就是到处修补修改的痕迹生成出来的HTML、JS的逻辑和层次毫无美感看了2个小时眼睛都看疼了楞是没分析出签名方法也许再看看会有结果但是我等不及了所以这时候祭出爬虫神器-无头浏览器 这里我选择了PhantomJS这个无头浏览器具体的使用过程就不详述了有兴趣可以到官网了解一下写了如下分析代码 通过代码我们可以很清楚的看到主要是两个目的输出包含interface.bilibili.com的URL以及本次视频的标题 测试一下确实可以得到URL和标题这里有个要注意的是B站默认是GB2312编码所以PhantomJS要加一个参数就是输出编码改为GB2312 到此为止可以说完成了整个爬虫部分的调研至少是有完整的可行性了。 2、然后进行业务功能的设计 有了可行性后就可以天马行空的进行业务功能的设计了既然上面说到那个鸡鸡网站特别不好用那么我们就来重新设计一下这个爬虫的功能 一、用户端功能 1、用户可以输入视频番号和序号提交视频下载注干净清爽的提交界面 最终界面如下 2、用户可以在提交视频下载后可以看到实时的处理进度并且能够看到自己以前提交的任务注需要设计任务机制做好状态控制这里采用Azure的存储队列 最终界面如下 3、用户最终的下载速度特别快注使用CDN和网络存储技术这里采用阿里云的CDN和OSS 最终效果如下 4、下载进度能够通过邮件进行视频信息的推送注使用邮件模板技术详见《使用阿里云邮件推送服务架设自己邮件验证与推送体系》这里采用SendCloud云服务 最终效果如下 二、服务端功能 1、考虑到B站CDN可能会限制IP地址使用需要使用分布式的爬虫设计注这里使用Windows Console Application程序 2、增加下载效率使用多线程技术注因为使用.NET做爬虫多线程控制还算比较稳定和齐全 3、对无头浏览器进行精准的控制注这里是Windows环境考虑使用.NET里面的Process类进行控制 有了业务功能做指导下面就可以进行完整的系统设计了 3、系统设计与技术细节 老规矩先放出整体设计图 其中具体的技术细节和代码如下 一、分布式架构的核心 1、分布式Win32控制台程序需要有账号体系这样可以进行节点的实施状态管理和记录 2、任务的新增、获取、核销等需要精准的控制不能出现并发冲突所以这里使用了消息队列也就是上面所说的Azure存储队列服务 任务的新增和分配主要代码如下 3、丰富的日志和错误处理机制 因为会一直执行分布式节点的稳定性非常重要Windows Console Application程序本身是非常稳定因此在具体的代码里面内存控制与对象释放、死循环的避免、多线程优化、异常的捕捉和处理等都非常重要这里不一一洗漱都是开发的基本功做类似的应用的话大家也需要多注意。另外因为无头浏览器的执行是放在分布式的客户端里面进行的因此也需要对无头浏览器进行精准控制下面会详细说到 二、爬虫任务的数据结构 本案例中由于只对单一URL进行分析和爬虫业务逻辑并不复杂考虑到需要支持进度查询、状态控制等数据结构设计如下就2个表 1、爬虫任务表记录爬虫任务控制状态、记录过程参数等 2、视频存储表 任务完成后就把CDN加速好的视频信息存储下来一方面进行冗余查询另一方面也用于其他用户下载可以秒下 三、无头浏览器的精准控制 1、.NET里面的Process类 上面提到了无头浏览器毕竟有一个浏览器内核的执行而在任务处理的高峰可能会不断的调用、销毁这个浏览器而Web行为又是非常不稳定的所以想要分布式的稳定就一定要进行无头浏览器的精准控制。这里用到了.NET里面Process来控制无头浏览器的执行主要的技术点有 不显示命令窗口重定向输入输出 监听数据接收 这里可以看到我们之前在PhantomJS里面写的JS代码主要就输出了两点一个是包含下载地址JSON数据的URL地址另一个是视频的标题这里都做了记录 差错处理以及任务的关闭和结束 2、重试的机制 实测中发现无头浏览器的失败率和出错率还是挺高的因此在数据结构设计的时候就预留了重试机制当分布式客户端处理视频失败时服务端重新提交消息队列超过一定的次数再宣告任务失败 三、CDN的加速处理 1、之前在这篇文章《使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践》中提出了一种非常好的资源管理和加速方式核心思路包括三点 文件资源的信息管理和目录结构在本地数据表中GUID化文件的数据存储在阿里云OSS中无目录结构的扁平化记录对OSS绑定域名对CDN服务也绑定域名反馈给客户端的文件信息直接使用CDN地址从而回源到OSS中或者直接命中缓存 2、同样的在本次案例中也使用了这样的处理方式最终给用户的下载地址是CDN下载地址具体的处理流程可以看上面的设计图应该能一目了然 3、关于对上传到OSS的处理 在最初的设计方案中分布式客户端完全下载到视频文件的内容后是上传到服务端由服务端统一进行上传后来评估这样的方式对服务端的压力和带宽占用都明显提升了既然是分布式系统应当充分利用分布式客户端的资源所以改为分布式客户端直接上传文件到阿里云OSS中这样做唯一的弊端是分布式客户端会获取明文的阿里云管理密钥于是又加入了阿里云RAM权限管理加入了OSS子权限的控制问题就迎刃而解了。 四、邮件推送的处理 在上面的功能设计中加入了邮件推送的功能详细的设计思路参见这篇文章《使用阿里云邮件推送服务架设自己邮件验证与推送体系》邮件模板就是HTML代码这里就不多说了但有一个小插曲就是阿里云的邮件推送服务实在是太烂了特别是QQ邮箱的到达率奇差无比因此最终的实施部分换成了搜狐的SendCloud解决方案。 好啦整个实施到这里基本上就差不多了老规矩还是要总结和思考一下 1、技术改进。因为整个程序就做了2天不到很多技术细节点并未很到位还有大量可以改进的地方 比如对于PhantomJS更多细节参数的研究是不是可以提升效率是不是可以减少出错率又比如任务表的设计耦合的地方还是很多应该还可以优化设计又比如在用户界面上没有做太多H5的美工应该还可以加强一下又比如分布式客户端Windows Console Application是不是可以强化为Windows Service并且加入监控和守护进程又比如经过研究发现B站用了大厂商蓝汛的CDN服务非常智能在快速的加载30%以后就进行限速那么对于这样的瓶颈的处理是不是还可以更细致一些 这些工作在后续我会慢慢完善 2、功能改进。今天只是为了测试存储队列的这个服务所以简单的进行了B站视频的爬虫事实上还有很多后续功能可以拓展 比如加入微信扫码就可以在微信上下载视频、观看视频 比如可以绑定微信公众号在微信公众号上也可以视频番号发起下载并通过微信模板消息推送处理结果 比如可以加入对弹幕的处理 比如可以加入一些经营性的功能例如广告、收费高速下载、加入存储广告站的下载地址等等 3、其他思考 还是老生常谈的话题坚决的反对前端向开发人员进行大型系统的架构做出来除了垃圾就是垃圾目前个人信息的保护是非常严格的如果下载并存储电影和综艺节目一定是非法的甚至触犯刑法而这种个人发布的视频的爬虫下载不知道上传时有没有和B站签署版权协议或者电子协议如果是直接下载地址给到用户还好但在本案例中加入了中转存储那么这样的行为是不是涉嫌违法呢我认为暂时法律风险不大但从长远看不太合适 相关文章  【初码干货】关于.NET玩爬虫这些事基于C#.NET的高端智能化网络爬虫基于C#.NET的高端智能化网络爬虫 原文地址http://www.cnblogs.com/printhelloworld/p/6944343.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.zqtcl.cn/news/497415/

相关文章:

  • 建设工程资质证书二维码扫描网站自己做的网站如何让qq登录
  • 网站域名有效期wordpress 特别慢
  • 建立个人网站服务器如何用dedecms做网站
  • php网站开发实市场推广策略 包括哪些
  • 合众商道网站开发可以投稿的写作网站
  • 北京贸易公司网站制作免费的查企业的网站
  • 网站建设报价表模板下载小程序怎么找出来
  • 网站制作简单协议wordpress快速建站教程视频教程
  • 杭州做网站价格北京企业响应式网站建设
  • 30个成功的电子商务网站设计中企动力 网站报价
  • php 网站开发 视频百度seo排名查询
  • 网站开发代码wordpress提示安装
  • 网站推广的策略高端网球拍
  • 广东知名网站建设wordpress 用户量
  • asp源代码网站网络架构图是什么
  • 专业做淘宝网站公司吗苏州网站制作开发
  • 电商网站模板html安阳历史
  • seo快速排名多少钱安阳网站怎么优化
  • 如何在网站后台删除栏目阿里巴巴上做网站要多少钱
  • 网站建设意识形态工作河北省两学一做网站
  • 綦江建站哪家正规php做不了大型网站吗
  • 优秀的设计网站青岛网站设计企业
  • 谁有做爰网站号wordpress 4.8 中文
  • 毕业设计做网站用什么广州中智软件开发有限公司
  • 哪个网站不花钱可以做招聘wordpress没有页脚
  • 免费视频网站素材网络系统管理技能大赛
  • 聊天网站建设网站建设毕业设计评价
  • 网站建设 内容缺乏域名备案要多久
  • 产品展示型网站建设全国新冠疫苗接种率
  • 网站建设商如何自建商城和电商平台