你见过 Web 爬虫, 可是你见过 P2P 爬虫吗?

2016-02-29 06:09:02 +08:00
 CrazySpiderMan

网络爬虫爱好者为了爬取视频, 图片, 文档, 软件, 可能只想到写一个 Web 爬虫, 从各大网站爬取. 但是你知道吗? 这个世界上, 还有 DHT 协议, BitTorrent 协议.

想想看, 全世界每天有那么多人通过 BT 种子 & 磁力链接下载资源(有你懂滴的资源), 如果写个爬虫, 从 DHT 网络里"监听"人们正在下载的资源, 然后把这个资源的种子信息给下载并保存下来. 打造成属于自己的海盗湾!

这几天, 我用 Node.js 重写了我去年用 Python 写出的 DHT 爬虫 + BT 客户端 = P2P 爬虫. 为什么用 Node.js 重写呢? 除了我闲得蛋疼外, 还有个原因是 Node.js 在这个 Network IO 操作频繁的项目上, 性能非常非常牛逼, 占用也非常少! 不过代码难写倒是真的. 我花了好多天才重写出来.

爬虫运行演示视频: http://v.youku.com/v_show/id_XMTQ4NTIzMDU2MA==.html

默认参数下, 在最便宜的日本区 Vultr VPS 运行 24 小时, 可”监听"到 50 万 个 BT 种子信息. 我那个 Python 版的爬虫(只开源一部分), 已经爬了 1400 万种子信息, 连续运行了一年多.

我平常下载资源, 都是从我私人种子数据库里搜索, 然后拿磁力链接去下载. 比如搜索引擎找不到的新电影, 我都能从我数据库找到.

代码在这里: https://github.com/Fuck-You-GFW/p2pspider

求 Star !

如果你对此也有研究, 建议你看看 README.md, 列有这个项目如何发展的计划. 如果你对此感兴趣, 请 fork 它, 贡献你的智慧.

如果你对 Node.js 比较熟练, 也欢迎你重构我的代码, 我对 Node.js 不是很熟, 代码写得不是很好.

Star 到 1000 的时候, 我会写个文章, 给感兴趣但看不懂相关协议的人讲讲原理, 让每个人都可以写属于自己的 P2P 爬虫建立私人海盗湾. 包教会!

如果有兴趣, 可加 QQ 群即时交流: 145234507 (不用微信群是因为很蛋疼)

@vitovan @iugo (这就是我说的爬虫项目)

5184 次点击
所在节点    分享创造
97 条回复
imlonghao
2016-02-29 13:17:01 +08:00
@CrazySpiderMan 我的博客也在用 RethinkDB ,从 MongoDB 换过去的...
CrazySpiderMan
2016-02-29 13:19:24 +08:00
@imlonghao 嘿! 我认识你, 我在你博客留过言的. 是那个支付宝什么的文章.
shiji
2016-02-29 13:20:20 +08:00
能把番号集齐么?
CrazySpiderMan
2016-02-29 13:20:42 +08:00
@SlipStupig 我以前昵称就是老太太. 正巧认识我的人也在 V2EX 混.

我很好奇, 你在哪里找到特别大的 samba 的网络呢? 以至于能写个爬虫了.
CupTools
2016-02-29 13:21:03 +08:00
@CrazySpiderMan 我最近写了个邮件系统,用的就是 RethinkDB
CrazySpiderMan
2016-02-29 13:22:09 +08:00
@shiji 能否集齐就不晓得了, 没统计过. 反正特别多. 哈哈.
CupTools
2016-02-29 13:22:45 +08:00
用 cluster 跑 4 线程: http://url.sc/k

我想是不是 CPU 不够快
AlexaZhou
2016-02-29 13:37:46 +08:00
感觉楼主这个有点走偏了,满满的求 star 味道,这样求来的 star 是木有意义的

个人认为开源一个项目,重要的是能给其他人带来价值,这样自然会有 star

ps :建议先把文档弄好,这样 star 才会多,而不是说到了 1000star 才放文档...
zqhong
2016-02-29 13:43:04 +08:00
@CupTools RethinkDB ,看起来很不错呀!一直想找类似这样的东西,十分感谢~
lhbc
2016-02-29 13:50:10 +08:00
运营商那里, P2P 缓存系统都有
CupTools
2016-02-29 13:55:28 +08:00
@zqhong 你的用途是什么?我可能可以帮得上
CupTools
2016-02-29 13:58:43 +08:00
@CrazySpiderMan 话说内存占用很大。我看了看代码, LRU 不知道是是不是问题, Socket 数太大不知道是不是问题,总之我把这货丢到 32G 的机子都跑满内存

防火墙上面看到这货开了 2900000+连接, netstat -an 直接 seg fault
miyuki
2016-02-29 14:27:50 +08:00
vitovan
2016-02-29 14:34:16 +08:00
r#12 @CrazySpiderMan 晚上回去看~
a342191555
2016-02-29 14:34:58 +08:00
在 HOSTUS 上成功跑挂了,找了客服向他解释了我在干啥后才恢复- -、、、
He told me:
Looks like it was suspended: SUSPENDING VPS xxxx (xxx.xxx.xxx.xxx); it has 65502 conntrack sessions
CrazySpiderMan
2016-02-29 14:37:39 +08:00
@AlexaZhou 有部分你说得对, 我改正.

PS: 我之前看到你开发的 VeryNginx. 非常不错! 虽然我业余的, 用不到这个玩意儿, 但是我晓得这个绝对很有前景, 毕竟市场有这个需求, 又是较早出现的. 向你学习你的编程理念!
SlipStupig
2016-02-29 14:40:09 +08:00
@CrazySpiderMan 以前校内网交换机只要改一下掩码就能过去,还有一些特殊场景,主要目的不在于有多大而是有多少东西
CrazySpiderMan
2016-02-29 14:40:45 +08:00
@CupTools 我对 Node.js 不是很熟, 我得排查排查. 不过, 程序自动退出没有?

@a342191555 论买一个可耐操的 VPS 的重要性. :) 从某种意义来说, 运行这个爬虫, 就是主动对自己造成 DDOS 攻击. 所以要可以控制好 nodesMaxSize 的值.

也许是 TCP 连接数太大? 我考虑考虑得限制下并发连接数了.
xlrtx
2016-02-29 14:47:57 +08:00
我也想写一个, 然后做个搜索站, 加上 aria2 的功能, 点击下载直接分配到家里的路由器上.
welsmann
2016-02-29 15:00:49 +08:00
之前初学 Python 时写过一个,不过当时做了额外的种子文件内容解析,后来数据多到付不起 VPS 费用干脆就关掉了...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/259754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX