凌晨的时候朋友告诉我 tg 有一些奇怪的消息,然后看到了主题 /t/939486 大概是对扩展爬取数据的一些疑问。
针对疑问我整理一下:
扩展的前后端代码都是开源的,同时一开始就把日志、请求分析、API 等各项内容开放,如果扩展有其他的偷鸡摸狗的行为欢迎石锤然后再投诉和删除。
日志、API 、请求分析在 vDaily 最底部
前端: https://github.com/sciooga/v2ex-plus
后端: https://github.com/sciooga/v2ex-plus-backend
目前扩展发布是 Github 配置的 CI 发布的,也欢迎解包线上代码对比是否和开源代码一致
扩展有权限能访问的域名有三个: imgur 、v2ex 、weibo ,除此之外会触发跨域请求无法发出,可以看源码或者看浏览器内的扩展授权(部分 webkit 魔改浏览器可能会显示所有域名权限,可以解包查看对应代码)。
欢迎查看源码
因为没有操作 cookie ,同时也有非扩展用户遇到这种情况,早两天还也和站长沟通了这个情况 /t/937337
扩展无论获取当前浏览还是历史主题,都只是获取主题公开信息然后提交,具体看源码,用户个人任何隐私数据都没有获取以及提交。 https://github.com/sciooga/v2ex-plus/blob/master/spider/index.js
扩展由于每几分钟会检查一次签到、未读消息,老版本还会检查关注的用户 /节点是否有新主题 /回复,这些才是导致活跃度增长的主要原因,vDaily 的工作逻辑是浏览一个主题可能(之前是 30% 目前是 0%)会附带 1-3 个请求历史帖子,这也会导致更多的活跃度增加
vDaily 是一个很老的,大概五六年前的项目,之前的域名已经停止服务了,当时也是因为没有时间每天浏览 V 站,做了个爬虫爬取数据筛选精华方便看看错过的内容,后面由于没有维护停掉了几年,现在重写了加入了扩展侧栏做推荐。
对于 V 站可能会产生一定量的未缓存的老主题请求,在站长的要求下已经关闭历史主题的抓取,对于用户会多消耗一些网络资源(仅加载 HTML ,图片、CSS 等不加载)
当时的通知过于简单 https://github.com/sciooga/v2ex-plus/blob/2936025bf45b7b4b64a890a2e39443140b103f9a/background.js#L28
V 站用户需求还是很多的,扩展尽可能将大家的反馈都实现和改进,但是不少功能比较个性化,所以 2.0 大部分功能都有独立开关,至于是默认开启还是默认关闭,确实是由我决定的,这不好,以后的功能将默认都关闭。
goAccess 的实时日志是由一个很脆弱的 websocket 实现的,昨天访问得多就挂掉了,这太正常了...然后今天早上我手动启动了之后就从启动时开始记录了,日志文件应该都在,有需要可以公布。
目前扩展获取历史主题的功能也已经停掉了,项目仍然是开源的,前后端代码以及实时运行的日志、统计都是公开的,另外通过我们的 key 给我们发消息的朋友应该也明白这个功能并没有涉及到黑产灰产了吧?
如果还有任何问题欢迎指正,开源项目得到大家的监督是很好的一件事,因为目前在外,看见消息会尽快回复。
1
iPhone11 2023-05-14 11:42:03 +08:00
貌似不是五次,很多次很快一页 不知道其他人的频率
|
2
sciooga OP @iPhone11 #1 下面是源码,抱歉之前将 30 秒记错为 60 秒了,是你打开主题后会有最多额外 3 个请求,如果看了十秒就关闭,不会有额外请求,如果你停留超过 90 秒以上,最多可能会有 3 个额外请求
https://github.com/sciooga/v2ex-plus/blob/master/spider/index.js#L160 |
3
zyronon 2023-05-14 11:47:44 +08:00 3
|
4
sciooga OP @zyronon #3 因为你浏览了不止一个主题,每个主题的 tab 标签页还在的情况下会有额外的请求,但是你看的到的请求也不意味会爬取更多的数据(以前是 70% 以上返回空任务,现在是 100% 返回空任务),你看看会不会导致新的发向 V 站的请求就知道了
|
5
chrawsl 2023-05-14 11:59:05 +08:00 6
V 站日常,情绪第一
|
6
sciooga OP 另外,vDaily 除了扩展内的推荐,还有机器人发送的周报比如这一期 https://www.v2ex.com/t/939837 ,如果大家反感这样的行为,我们也会停止。
|
7
ZeroClover 2023-05-14 12:06:10 +08:00 1
开源不是给自己脱罪的理由,Ant Design 也是在开源的情况下引入了「彩蛋」,结果是什么?
我只知道你的插件: 1. 用用户的设备和网络干了远超最初描述之外的事情 2. 可以远程下发命令 |
8
goophy 2023-05-14 12:07:55 +08:00
v2ex-plus, version 2.10, 看起来从主题浏览开始,30 秒就 fetch 一个主题,页面不刷新会一直继续。
附上开了插件和不开插件相同页面 10 分钟的记录 <img src=https://imgur.com/FRsJInk> <img src=https://imgur.com/ygXpRlm> |
9
jas0n2k 2023-05-14 12:08:11 +08:00 via iPhone
开源并不是为你干坏事开脱的借口
|
10
goophy 2023-05-14 12:09:53 +08:00
|
11
goophy 2023-05-14 12:16:36 +08:00
我倒是一直用 v2ex-plus ,都挺好,除了最近看过的主题确实困扰了一下(很多都是我不关心也不会点开的),作者继续改进吧,我相信作者初衷倒也没啥坏心思。
|
12
kingfalse 2023-05-14 12:16:39 +08:00 via Android
有权限能访问的域名有三个: imgur 、v2ex 、weibo ,
那不就是可以抓微博了, |
14
sciooga OP @ZeroClover #7 针对你反馈的亮点,我解释一下
1. 远超最初描述之外的事情,这个我不清楚该这么定义,功能更新有通知(没告知默认开启是我们的问题),选项页有介绍以及单独的开关,后续的功能将默认关闭,按用户喜好开启。 2. 远程下发命令(或者说主题 id 更明确)仅限于获取某个 v 站的主题数据,并非“肉鸡”概念,也做不到除了获取一个主题数据之外的操作。 |
15
sciooga OP @kingfalse #12 你好,需要微博域名权限唯一做的是在 header 增加 referer ,因为微博已经开启了防盗链,只有加上 referer ,v 站内历史主题发布的微博图片才能正常显示。
https://github.com/sciooga/v2ex-plus/blob/master/manifest.json#L65 https://github.com/sciooga/v2ex-plus/blob/master/rules.json 扩展是否可以爬取微博?项目内没有对应的代码,爬取微博的难度也比较大,在我看来真要爬取换个途径可能更简单 |
16
ZeroClover 2023-05-14 12:26:25 +08:00
|
17
sciooga OP @ZeroClover #7
@jas0n2k #9 两位提到了开源是否让我脱“罪”的问题,也包括之前主题的 OP 也说到分布式爬虫存在的问题。 我认为最大的问题在于没有明确告知用户该功能的开启,这个功能是参考 京价保 https://github.com/sunoj/jjb 的历史价格实现的(无意引火),用户浏览商品时会提交当前商品的价格和优惠信息,V2EX Plus 扩展内参考实现了这个功能,同时为了补全历史数据增加了爬取历史数据的功能。 |
18
goophy 2023-05-14 12:30:37 +08:00
|
19
sciooga OP @ZeroClover #16 爬虫不在我服务器上,用用户网络是因为维护爬虫的登录态比较麻烦(数年前 1.0 就是这样实现的),并不是绕过 IP 限制,V 站每天更新的主题数量并不多。
|
20
Creamliu 2023-05-14 12:34:29 +08:00 via iPhone
早干嘛去了???事情没闹大就继续干呗
|
21
Livid MOD 关于翻页 502 。
之前我们上了这样的一个功能,用 cookie 保存访问过的最后的页码。这样当你进入一个有多页的主题页面时,会直接进入到你最后访问过的页面。 这个爬虫会让用户的这个 cookie 中增加大量用户没有访问过的页面的页码。 至于是否是由于 cookie 尺寸过大造成的 502 ,因为我没有也不会去安装这个插件,所以我无法验证。 这也是为什么遇到 502 问题的用户,清掉 cookie 之后就可以访问了。 我们最近暂时把这个记住和跳转页码的功能下掉了。所以现在当你访问一个有多页的主题时,如果 URL 中没有指定 p=x 那么现在只会默认进入第一页。 |
22
sciooga OP 关于翻页 502 ,我补充一点,vDaily 功能上线是近期,之前我遇到时也查过 V 站以前的主题,一年以前就有反馈 /t/857753
|
23
Xianmua 2023-05-14 13:03:26 +08:00
|
24
Xianmua 2023-05-14 13:06:00 +08:00
|
25
lwjef 2023-05-14 13:06:15 +08:00
最最严重的问题是没有事先告知默认开启,也没有重点突出且提示该功能的作用,类比到网站,许多网站即使收集 cookie 做其他用途都会对用户提示,网站收集的用户日志如何处理也是个很复杂的问题,关键这网站也不是你的啊。
最终收集的信息不管有没有侵犯特定用户的隐私,滑坡思考一下就和某些网站拿用户浏览记录配合 cookie 或者其他方式在第三方做广告盈利一样非常让人讨厌,这里并不是说你收集的浏览数量、点赞数量等信息做了这些事情,某些网站的行为显然更让用户讨厌,但是上述行为稍懂一些的用户是可以选择不用不打开类似网站,对于你的插件用户并没有对这些风险的预知。 Q: 是否会操作 Cookie ? A: 不会 欢迎查看源码 前端有源码我觉得挺坦荡,后端提供源码就别提了,意义有限。 同时通读源码为难人了,但是用户提出的细节猜测可以考虑解释下,这些问题比较容易回复。 有用户提到了这个后端的 cookie 行为,其实和前端没关系,可以考虑下。 https://github.com/sciooga/v2ex-plus-backend/blob/5427f9f97613e71086777bcfc8cac265a7b1255b/fastapi/tools.py#L137 这里 get 和 post 有个 sign ,我觉得也需要 https://www.v2ex.com/t/939839#r_13072767 |
26
yxzblue 2023-05-14 13:10:06 +08:00 1
居然还 star 了,先取消为敬
|
27
lwjef 2023-05-14 13:11:52 +08:00
@Xianmua #24 我的理解作者应该指的是 task 接口停掉的,post 和 get 都是本地插件行为,除非更新插件没法停止这些行为,但是完全可以把远端关了直接 404 啊。插件作者真是没意识到问题的严重性,公关行为极其失败。
|
28
Livid MOD |
31
sciooga OP [项目地址]/blob/master/spider/index.js#L184
实在抱歉,我在动车上,检查了代码是我这里的判断出错了,times-- 变为负数后布尔值又变成 True 了,是我的问题 目前这部分代码只会请求我们的服务器,服务器返回的是空值,所以不会请求 V 站了,后续需要通过更新扩展移除掉这些请求 @Xianmua 上面的朋友说得没错,请求会发到我们服务器申请新的任务但是任务一直返回空,所以不会再爬取历史数据 |
32
Xianmua 2023-05-14 13:31:21 +08:00 8
这事录视频了,看视频就完了,昨天说不掺和了 还是又看了下,这回爱咋咋地吧,这条应该是真最后一条了,反正我提醒的义务尽到了,大部分朋友不可能来骂我,我没有任何歪心思,我对的起 v 站的朋友们。
至于上面那个大眼睛 morty ,让它姥爷去折磨它吧,我没那本事哈哈。 |
33
bxqqq 2023-05-14 13:49:28 +08:00
@zyronon 老哥,借楼问一句,你今天是更新了脚本吗?我上午还能正常使用,现在就点击帖子,悬浮的页面出现后就一直 load 转圈,加载不出来任何东西。。
|
40
picone 2023-05-14 17:19:49 +08:00
开源的确不是开脱的借口,但是作为用户应该反思对使用开源软件时审查的是否足够。所有人都是善良的当然好,但作为用户方也不能老依赖这个
|
41
dianso 2023-05-14 18:56:52 +08:00
和你说的完全不一样,每秒钟访问几十次每个主题
|
42
ffkjjj 2023-05-15 09:25:05 +08:00
这个插件不知道什么情况下会自动启用 vDaily. 我关闭过 vDaily 两次, 都被自动启用了.
因为我不喜欢在首页右侧出现 vDaliy 的相关主题列表, 我就关闭过这个功能. 后面发现 首页 vDaliy 列表又出现了, 一看设置, vDaliy 是开启的. 当时还以为记忆出现了偏差, 以为之前没关闭过 vDaliy. 然后又手动关闭了 vDaliy 一次. 今天看到这个主题, 又去看了眼设置, vDaliy 又被启用了... |
43
ffkjjj 2023-05-15 09:26:19 +08:00
@ffkjjj #42 回复错了, 不是看了这个帖子, 是 https://www.v2ex.com/t/939839 这个
|
44
shyrock 2023-05-15 09:28:08 +08:00
哎,怎么说呢。
首先挺喜欢这个插件的,也用了很多年。 但是作者在这个主题中的表现确实不够坦诚,这种遮遮掩掩的态度越发加重了大家的质疑。 希望这事情能够说清楚,但是似乎说清楚的希望不大。。。 |
45
unco020511 2023-05-15 09:48:42 +08:00 12
我觉得大家是不是有些太敏感了,插件也是为爱发电呀,分析了下前因后果,感觉就是作者的一个 bug 引起不符合预期的爬取次数?
|
46
ukyoo 2023-05-15 09:57:07 +08:00
这点用户量爬了能干嘛...
|
47
sillydaddy 2023-05-15 10:07:14 +08:00 4
@shyrock 事件的经过大概是这样的:
v2ex plus 插件作者开发了一个关于 V2EX 的新功能 vDaily ,可以发布类似于 v 站帖子排行榜的功能,也有挖掘历史帖子展示出来的功能,所以它不光需要 v 站近期的帖子,还需要历史帖子的数据。 按照 plus 作者的说法,它向 sov2ex 作者借了一份爬取过的 v 站的存量帖子数据,但有些数据(点赞数、感谢数)不全。 https://www.v2ex.com/t/939486?p=2#r_13072169 所以,plus 作者决定自己爬取历史帖子数据。根据下面用户的反馈,这大概是在 2 个月前开始的: https://www.v2ex.com/t/924796 问题在于,plus 作者完成这个爬取的过程,是借助 plus 插件用户:它用服务器下发给每个 plus 插件用户一些主题 id ,让这些用户在本地帮它完成主题的爬取,然后上传爬取到的主题内容到 plus 作者的服务器上。这就导致了刚才提到的那个帖子里,plus 插件的用户突然发现「最近查看过的主题」里面,出现了一些自己从来没有看过的主题。 plus 作者的这个决定,并没有征得 plus 插件用户的同意,没有显式给出这些用户自主选择的权利。 其实单 ip 爬取 v 站的数据,分布到 6 个月内,按照 90 万个帖子,180 天,每天大概 5000 个帖子,平均 20 秒请求一个帖子,对 v 站造成的压力应该不会增加多少。猜测 plus 作者可能是想快点爬完? |
48
goodryb 2023-05-15 10:21:53 +08:00 1
@sillydaddy #47 课代表就是你。
这个扩展原来也用了挺长时间,一直没什么更新,最近几个月感觉更新的很频繁,果然还是有些问题在里面。 @sciooga #31 其实有时候我们也不需要多么复杂的功能,保持初心就好 |
49
sillydaddy 2023-05-15 10:29:03 +08:00 1
@goodryb
问题在于,按照上面的分析,它这样加速爬,不管是单机加速爬,还是分布式加速爬,10 倍的加速,会给 v 站造成 10 倍压力,100 倍就是 100 倍压力。 这样走捷径,相当于是走了歪路了,把用户和站长都触犯了。推出新功能,完全可以循序渐进啊,比如 v 站有 90 万个历史帖子,但不必都爬完,就可以推出新功能。想挖掘历史帖子的话,可以逐步挖掘,比如先爬取 1/3 的历史帖子,这 1/3 的历史帖子(30 万条),完全能够支撑新功能。后面再逐渐补充爬取剩下的 2/3 的帖子。 |
50
mogazheng 2023-05-15 10:40:13 +08:00
不管你开不开源,有没有开关,在做这个功能的时候,难道没有一点点的罪恶感?
如果有,但却没有尽可能让用户知道,是不是存在一点侥幸心理? 如果没有,那更可怕。 |
51
NessajCN 2023-05-15 11:04:19 +08:00
@lwjef 我进去看了一眼源码,的确只上传了帖子内容,没有用户个人信息。暂且相信作者没有窃取隐私的主观恶意。
那么现在的爬虫行为最大的客观危害就是对站点的访问压力了 剩下的就是对用户情感的损害(我个人不用插件所以这方面感受不深) |
52
quicksand 2023-05-15 11:24:46 +08:00 2
我觉得作者的出发点肯定是好的, 做产品过程中难免会犯错. 不过确实侵犯了用户的权利, 这个和开源不开源是没关系的, 如果作者能从这次事件中吸取经验那也是好事
|
53
micromars 2023-05-15 13:57:54 +08:00 2
@quicksand #52 没有冒犯的意思,但是'我觉得作者的出发点肯定是好的, 做产品过程中难免会犯错',这两句话太经典了,DNA 动了
|
54
myselflove8090 2023-05-15 17:48:05 +08:00
国内新闻发布会现场😄,楼上
|
55
MajestySolor 2023-05-15 19:08:49 +08:00
这种功能难道不应该是默认关闭由用户自己选择开启么
不声不响默认开启这吃相也太难看了 🐶 |