
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用爬虫技术,警钟长鸣,做一个守法、护法、有原则的技术人员。
2011年1月微信问世,腾讯公司经过持续投入,构建起包括微信平台、微信个人用户、开放平台、微信支付、小程序等产品功能和服务,构建起包括微信平台、微信个人用户、公众号运营者、第三方服务商等多角色主体共同参与的微信生态系统。为了保障微信生态系统的健康发展,维护包括微信公众平台在内的运营秩序和用户信息安全,保证良好的用户体验,腾讯公司作为平台经营者和管理者,通过在微信公众平台官网(https://mp.weixin.qq.com)设置 robots 协议,禁止任何第三方通过爬虫技术抓取微信公众号平台信息内容及数据,制定并公示了各种微信平台规则对微信公众平台信息内容及数据资源安全进行保护。
被告系“极致了”(www.jzl.com)产品的经营者斯氏(杭州)新媒体科技有限公司,未经腾讯公司许可利用爬虫技术非法抓取微信公众平台信息内容及数据,并对外提供公众号及其文章的搜索、公众号导航及排行、公众号数据抓取、公众号数据分析等微信公众号数据服务。
原告认为,被告的行为系利用非法抓取的微信公众号源网页信息内容和数据,通过简单的统计和分析后对外提供微信公众号数据服务的寄生经营行为,重构了微信公众号的数据评价体系,违背了微信公众平台产品设计逻辑和运营原则,损害了微信平台生态系统的健康,损害了原告的商业利益,具有不正当性。
原告腾讯公司和腾讯科技公司系微信公众平台的经营者和管理者,被告斯氏公司是“极致了”网站经营者。原告在微信公众平台官网设置了 robots 协议,禁止任何第三方通过爬虫技术爬取微信公众号平台信息内容及数据,制定并公示了各种微信平台规则对微信公众平台信息内容及数据资源安全进行保护。但“极致了”网站利用爬虫技术,绕开、突破了“微信登录限制”和“IP访问限制”,爬取微信公众平台信息内容及数据,并通过网站对外提供公众号搜索、导航及排行等数据服务。
法院经审理认定,“极致了”网站突破IP访问限制和封禁措施,破坏了微信产品登录访问服务运行,同时“爬虫”行为会对微信服务器造成负担,构成对微信公众号正常运行的妨碍。此外,被控行为也妨碍了微信产品的正常运行机制。“极致了”提供微信公众号及文章搜索、展示等服务,构成了对微信公众号部分数据内容服务的实质性替代,进而损害两原告通过对外授权可获取的合作利益等商业利益,构成不正当竞争。
根据《中华人民共和国民法典》第一百二十七条、第一千一百六十七条、《中华人民共和国反不正当竞争法》第二条、第十二条第二款第四项、第十七条、《最高人民法院关于审理不正当竞争民事案件应用法律若干问题的解释》第十七条、《中华人民共和国民事诉讼法》第六十四条第一款之规定,判决如下:
一、被告斯氏(杭州)新媒体科技有限公司立即停止涉案不正当竞争行为,即立即停止非法抓取微信公众号(http://mp.weixin.qq.com)信息内容及数据、停止对外提供微信公众号及其文章搜索、公众号排行及推荐、公众号数据抓取等涉案相关数据服务,并删除已经存储的前述数据;
二、被告斯氏(杭州)新媒体科技有限公司于本判决生效之日起十日内赔偿原告深圳市腾讯计算机系统有限公司、腾讯科技(深圳)有限公司经济损失及为制止不正当竞争行为所支付的合理费用共计60万元;
三、被告斯氏(杭州)新媒体科技有限公司于本判决生效之日起七日内,在极致了网站(www.jzl.com)连续七日刊登声明为原告深圳市腾讯计算机系统有限公司、腾讯科技(深圳)有限公司消除影响(声明内容需经法院审核,逾期不履行,由法院登报公开判决主要内容,登报费用由被告斯氏(杭州)新媒体科技有限公司负担);
关于赔偿数额,两原告主张以被告因侵权行为的获利作为赔偿的依据,一是以每月付费会员收费为计算维度,(2020)厦鹭证内字第102658号公证书载明被控网站截止原告公证时付费用户会员为8197人,付费会员分为三个等级(高级会员为89元每月,豪华会员为149元每月,超级会员为299元每月),仅以每月89元为计算基数,则“极致了”网站每月收取的会员费用为8197人*89元每月=729533元。根据两原告提交的就“极致了”网站对付费会员提供服务情况等进行的公证,即“极致了”网站对网站会员进行收费截止2021年8月至少已经10个月,考虑付费会员可能在不断增长变化的前提下,暂以729533元的50%为基数,“极致了”网站仅仅在10个月就付费会员获利为:729533元每月*50%*10个月=3647665元。此外,综合“极致了”网站实际收费会员制度运行时间远远早于2020年9月,故“极致了”网站实际获利情况远远不止于此。二是以单次监控/采集收集为计算维度,“极致了”网站最低一级的付费会员费用为每月89元,含300次阅读数监控和300次数据回采,即平均每次监控/回采收益约为0.15元。(2020)厦鹭证内字第102658号公证书载明被控网站截止原告公证时“极致了”网站已回采超过6亿公众号文章,即仅数据回采部分获利为6亿*0.15元=9000000元,考虑“极致了”网站还提供阅读数监控等其他服务,“极致了”网站实际获利不止于该金额。综上,原告主张被告赔偿经济损失及合理支出共计300万元。被告抗辩其经营的“极致了”网站获利较少,但未提交客观证据予以证明。
法院注意到如下事实:
1.被告在庭审中自认“极致了”网站于2020年5月上线,其中下线四个月后又重新上线直至2021年8月,被告在明知“极致了”网站涉嫌侵权的情况下仍然重新上线“极致了”网站,说明侵权主观恶意较大;
2.微信在社交产品市场中拥有极高的市场占有率,享有极高的知名度,商业价值十分可观。微信公众号拥有众多用户,具有较高的市场价值,能够给两原告带来可观的市场收益,同时微信公众号能够稳定地吸引海量用户数据,具有较大的数据衍生产品开发空间,能给两原告带来可观的增值利润;
3.被控“极致了”网站通过多个不同网址以及多个公众号进行宣传、服务,每日爬取的公众号及文章数量较大;
4.结合“极致了”网站不同产品、不同服务的报价等情节予以酌情考量其销售利润;
5.被控行为虽然造成了微信用户对微信公众号数据部分流量的流失,两者之间只是具有或然性关联关系;
6.“极致了”网站提供微信公众号文章搜索服务中,点击文章标题查看微信公众号文章内容仍需跳转回微信公众号进行展示;
7.两原告为本案诉讼采取了多次公证证据保全措施,并委托律师参与诉讼,需要支付合理维权费用。
综合考量上述因素,法院酌定被告连带赔偿两原告经济损失及为制止不正当竞争行为所支付的合理费用共计60万元。
杭州铁路运输法院(2021)浙8601民初309号民事判决书
本案的重点有两处,一是“极致了”网站使得网络用户无需登录微信账号、订阅微信公众号即可在“极致了”网站查看除了微信公众号文章以外的相关阅读数、点赞数等相关数据内容,影响微信用户协议的履行,破坏微信公众号数据的展示规则,对微信公众号点赞数、阅读数、公众号主体信息等部分数据内容构成实质性替代,分流了微信产品的部分潜在用户;二是微信客户端不仅向网络用户提供可以直接访问微信公众号及文章的搜索链接,还可以向搜狗搜索提供引擎独家授权、允许搜狗提供公众号及文章搜索。“极致了”官网提供微信公众号及文章搜索、展示等服务,已经构成对微信公众号部分数据内容服务的实质性替代,进而损害两原告通过对外授权可获取的合作利益等商业利益,构成不正当竞争。
目前市面上有不少类似于本案的产品,通过抓取各种内容平台数据,进行数据整理、加工处理后推出相关产品,长久做下去的必然是和官方有合作的,单单依靠爬虫进行数据采集的话,只要被平台方发现,告上法庭,必然会构成不正当竞争的,搞不好还有破坏计算机系统罪,广大爬虫工程师们如果公司正在研发此类产品,一定要确认是否与官方有合作,多多关注业务的合法合规性,避免走上违法犯罪的道路。

前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信
对传统的餐饮商家来说,小程序很好地解决了餐厅线下线上连接的问题,在引流获客、节约人力、营销宣传、塑造会员体系、改善消费体验等方面都有很大帮助。小程序点餐可以帮助餐饮企业节省一大把人力开支。一个包含扫码点单、菜品管理、优惠券推送、外卖配送的小程序,商家花几万元就能完成开发测试并投入。商家为什么要开通“扫码点餐”1.解决服务员不够用的问题。2.不怕顾客跑单漏单。3.在微信就能管理菜品、查看营业额。4.订单小票显示顾客桌号和已点菜品。5.可在“附近的小程序”找到您的门店。如今餐饮业常用的三种经营模式:1堂食点单模式客人通过小程序堂食点单。商家可以在微信扫码点餐小程序管理后台根据自己店内情况来设置不同
我需要当前周数,如果我没有完全弄错的话现在是第51周?然而,当在控制台中测试它时,我得到了这个。Time.now=>2013-12-1911:08:25+0100Time.now.strftime('%U')=>"50"Date.today=>Thu,19Dec2013Date.today.strftime("%U").to_i=>50这是为什么? 最佳答案 Time.now.strftime('%V')将根据ISO8601为您提供周数。 关于ruby-on-rails-RubyOnRa
我是Ruby的新手,我正在制作一个gem来与JSONRPCAPI交互,基本上所有调用和响应都非常相似,每个API调用都可以用一个函数处理,例如:Module::api_command('APINamespace.NamespaceMethod')但我也想(为了方便起见)能够做到:Module::APINamespace.NamespaceMethod是否有任何理由不通过使用Module.const_missing返回一个具有method_missing的虚拟类来执行此操作,这将允许将调用从Module::APINamespace.NamespaceMethod传递到Module::ap
我想知道使用MRIruby(2.0.0)和一些全局变量来创建竞争条件是否容易,但事实证明这并不容易。看起来它应该在某个时候失败,但它没有,我已经运行了10分钟。这是我一直在努力实现的代码:definc(*)a=$xa+=1a*=3000a/=3000$x=aendTHREADS=10COUNT=5000loopdo$x=1THREADS.times.mapdoThread.new{COUNT.times(&method(:inc))}end.each(&:join)breakputs"woohoo!"if$x!=THREADS*COUNT+1endputs$x为什么我无法生成(或检
在开发微信小程序的时候,我们可能需要开发环境和测试环境,或者其他环境,下面是切换环境的方法。首先需要明确的是:前端的页面代码是不区分环境的,环境的区分指的是云函数、云数据库、云存储这些。1、更改云函数的使用云环境这里我们从cloud1更改为test-cloud,这个改完是没有用的,因为在前端代码指定了使用的云环境。cloudfunctions文件和miniprogram文件虽然都在一个目录下,但是这两个没有直接联系。2、在evList.js中添加自己云环境evList.js存储了云环境列表,这里把test-cloud加到这个列表里,需要填写envId和alias,参照cloud1写就行。3、更
我想创建一个cafe和一个caveController。当我尝试通过命令使用rails脚手架创建我的cafe时railsgscaffoldcafename:string它将“cafe”的复数形式派生为“caves”,这意味着我无法制作我的cavesController,因为该名称已被使用。如何使Rails使用正确的复数形式? 最佳答案 您可以创建自己的变形。将此添加到您的config/initializers/inflections.rbActiveSupport::Inflector.inflectionsdo|inflect|i