你见过 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 (这就是我说的爬虫项目)

5002 次点击
所在节点    分享创造
97 条回复
julor
2016-03-01 07:19:52 +08:00
@CrazySpiderMan ,我来歪个楼,既然不满意 python 怎么不用 golang ,这个需要用起来也很舒服。
zqhong
2016-03-01 09:27:16 +08:00
@CupTools 谢谢。我有个和楼主类似的项目,数据库用的是 MySQL 。看了下 RethinkDB ,直观的 web 显示界面,还有 Python 客户端接口很人性化呀。而且呢, RethinkDB 存储的是 JSON 数据,以后作 API 接口也很方便。

不知道这东西有什么坑吗?新手,请指教~
CupTools
2016-03-01 10:23:39 +08:00
@zqhong 坑就是如果你用 filter 的话 RethinkDB 不会用 index 优化
123s
2016-03-01 10:27:58 +08:00
@CrazySpiderMan 好吧,没看到是 todo
CrazySpiderMan
2016-03-01 12:20:05 +08:00
@julor 因为我喜欢全能型的编程语言. JavaScript / Node.js 正好. Golang 不能开发 Chrome 扩展. Golang 不能像 JavaScript/Node.js 那么方便开发跨平台的 PC 程序.
hyq
2016-03-01 14:04:29 +08:00
golang 可以开发 chrome 扩展,详情参见 npapi
iugo
2016-03-01 15:04:28 +08:00
以前没有接触过这样的协议, 也没深入过 Node.js.

大概看了下代码, 有几个问题:
1. DHTSpider 作为模块, 但是在模块内部就 `new` 似乎不太好.
```
exports.start = function(options) {
(new DHTSpider(options)).start();
};
```
2. 关于 JavaScript 的书写风格, 目前我遵从 https://github.com/feross/standard/blob/master/RULES.md .

关于内存占用问题, 因为不懂 Node.js 也不好说. 不知道是不是因为无用的 UDP 连接没有被杀掉导致的.
ttbt
2016-03-01 16:17:24 +08:00
@AstroProfundis 擦擦 可以参考下我站的数据 bt0.com 希望能用上你的 code
CrazySpiderMan
2016-03-01 22:51:13 +08:00
@ttbt 你站是个好网站! 我已收藏! 下了一个情色电影. :)
ttbt
2016-03-01 22:57:34 +08:00
@CrazySpiderMan 我什么都不知道 就不能下个科幻啥的么 捂脸
kozora
2016-03-02 10:30:13 +08:00
@jasontse 抗投诉的比如俄罗斯这些可以吧?
dismonday
2016-03-02 15:41:35 +08:00
顶一下
CrazySpiderMan
2016-03-03 18:47:22 +08:00
@CupTools 现在最新版爬虫已稳定了. 你可以去 github 瞅瞅.
CupTools
2016-03-04 05:58:50 +08:00
@CrazySpiderMan 🌚最近在研究朴素贝尔斯算法
CupTools
2016-03-04 06:00:11 +08:00
@CrazySpiderMan 建议用 Promise , callback 不堪入目
CrazySpiderMan
2016-03-04 11:18:53 +08:00
@CupTools 对数据进行分类? Promise 以后再写, 这个目前不是重点. 不过我把这个需求提到 issue 去.
wico77
2016-06-04 00:08:42 +08:00
作者对程序 bug 崩溃已经不 care 了。也不再维护了。

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

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

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

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

© 2021 V2EX