爱意满满的作品展示区。
CrazySpiderMan

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

  •  5
     
  •   CrazySpiderMan ·
    Fuck-You-GFW · Feb 29, 2016 · 6533 views
    This topic created in 3902 days ago, the information mentioned may be changed or developed.

    网络爬虫爱好者为了爬取视频, 图片, 文档, 软件, 可能只想到写一个 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 (这就是我说的爬虫项目)

    Supplement 1  ·  Feb 29, 2016
    Star 是程序员的优良美德. 下载了代码都不 Star 下, I am angry. :)
    Supplement 2  ·  Feb 29, 2016
    看起来我程序得控制 TCP 连接数了, 好多人都把主机跑挂了. 说不定这程序还有内存泄露的问题. 不知有 Node.js 熟手看看呢? 我果真还是太菜了!
    Supplement 3  ·  Feb 29, 2016
    我邀请了 MinggeJS 的作者来改进改进代码, 不知会不会来. 你们当初可把他喷惨了, 不晓得是不是弃 V2EX 走了. :)
    Supplement 4  ·  Mar 3, 2016
    内存泄露已解决. 在默认参数情况下, 可随便艹了.
    Supplement 5  ·  Mar 5, 2016
    QQ 群已解散, 建群真没得意思.
    97 replies  •  2016-06-04 00:08:42 +08:00
    AstroProfundis
    AstroProfundis
    Feb 29, 2016
    1
    弱弱问一下,国外很多版权保护组织用来抓盗版下载者的是不是也是类似的东西
    znoodl
    znoodl
    Feb 29, 2016 via iPhone
    2
    肯定见过,要不然你以为那些 bt 站哪来的
    irockytan
    irockytan
    Feb 29, 2016 via iPhone
    3
    好像很有意思
    ericls
    ericls
    Feb 29, 2016 via iPhone
    5
    磁力站就这么来的啊
    0x2537
    0x2537
    Feb 29, 2016 via Android
    6
    很酷
    scarlex
    scarlex
    Feb 29, 2016
    8
    readme 上面由错字, reross -> feross
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    9
    @jedyu 小虾开源的手撕包菜里的 simdht_worker.py, simMetadata.py 就是我写的. 前者直接从我 github 弄过去的, 后者间接从我这里得到的(没开源). :)
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    10
    @AstroProfundis 可能噢. 细思极恐!
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    11
    @znoodl 有些 BT 站是纯 BT 站, 就是靠别人上传的, 不是自己主动到 DHT 网络里抓取的.
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    12
    @vitovan @iugo 看起来没收到我的 AT ?
    v1024
    v1024
    Feb 29, 2016
    13
    跑了一下 很快就抓到了 牛逼
    wtbhk
    wtbhk
    Feb 29, 2016
    14
    Cool!
    zhizhongzhiwai
    zhizhongzhiwai
    Feb 29, 2016
    15
    你说 python 在网络 io 上不如 nodejs , 这个不太靠谱吧, 你用过 python gevent 吗?
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    16
    @zhizhongzhiwai 几年前用过. 可能我太笨, 用不太好.
    MyFaith
    MyFaith
    Feb 29, 2016
    17
    求问, Python 版的是哪个
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    18
    @MyFaith Python 版的完整代码我没开源. 只开源了其中 DHT 爬虫部分. 地址: https://github.com/Fuck-You-GFW/simDHT

    完整版只有我少数几个朋友有. 我这不把 Python 版的给重写成了 Node.js 嘛, 而且真的比我那 Python 版好多了.
    ELIOTT
    ELIOTT
    Feb 29, 2016 via Android
    19
    root@eu:~/p2pspider# node example.js

    /root/p2pspider/example.js:7
    btclient.on('complete', (metadata, infohash, rinfo) => {
    ^
    SyntaxError: Unexpected token >
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3
    root@eu:~/p2pspider# node -v
    v0.10.22

    請問要如何解決?
    vdo
    vdo
    Feb 29, 2016
    20
    几年前就玩过了
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    21
    @ELIOTT 恐怕 Node.js 得升级到 V4.X.X 版本才可以.
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    22
    @vdo 还望前辈指点指点.
    ELIOTT
    ELIOTT
    Feb 29, 2016
    23
    @CrazySpiderMan 感謝,使用 4.1.0 已成功。

    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    24
    @ELIOTT 你用的什么 SSH 连接工具? 看起来是在平板连接过去的.
    ELIOTT
    ELIOTT
    Feb 29, 2016
    25
    @CrazySpiderMan JuiceSSH, 手機連接的.
    l0wkey
    l0wkey
    Feb 29, 2016
    26
    @CrazySpiderMan 看状态栏应该是 juice
    jy02201949
    jy02201949
    Feb 29, 2016
    27
    视频流媒体播放,冲着这个给 star 了,不知道楼主有没有后续开发的动力
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    28
    @jy02201949 感谢 Star! 我开发它的另外目的之一就是借由这个项目, 不断增强自己的技术能力, 毕竟这个项目需要很多很多我现目前都没有的知识, 那么就有动力去学习相关知识.

    另外就是, 我时间多得很, 多得平常睡觉都要 12 个小时 :)
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    29
    @CupTools 果真有人用 RethinkDB. 我关注它好久了, 然而并未用过. :)
    jasontse
    jasontse
    Feb 29, 2016 via iPad
    30
    忠告:不管你是出于什么目的,***一定不要***在境外主机上跑这段程序。
    ooh
    ooh
    Feb 29, 2016
    31
    老太太你还在搞这个?
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    32
    @ooh 换了马甲都还有人活捉我. :(
    ooh
    ooh
    Feb 29, 2016
    33
    @CrazySpiderMan 主要时你的马甲一般都比较 abnormal
    SlipStupig
    SlipStupig
    Feb 29, 2016
    34
    smb 爬虫专业爬内网共享
    llhh
    llhh
    Feb 29, 2016
    35
    见过 web 爬虫,也见过 p2p 爬虫。
    v2014
    v2014
    Feb 29, 2016
    36
    @CrazySpiderMan 老太太,我下 metadata 时请求本机的 bt 下载软件,每次都可以,但是请求根据 dht 给的地址去下 metadata 时,基本被拒绝,应该是什么问题啊
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    37
    @v2014 都不详细说说情况. 我又不是算命的.
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    38
    @ooh @v2014 以后不要叫我老太太了. 太显眼了.
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    39
    @SlipStupig samba 协议的爬虫?
    SlipStupig
    SlipStupig
    Feb 29, 2016
    40
    @CrazySpiderMan 是的,为啥要叫你老太太呢?
    imlonghao
    imlonghao
    Feb 29, 2016
    41
    @CrazySpiderMan 我的博客也在用 RethinkDB ,从 MongoDB 换过去的...
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    42
    @imlonghao 嘿! 我认识你, 我在你博客留过言的. 是那个支付宝什么的文章.
    shiji
    shiji
    Feb 29, 2016
    43
    能把番号集齐么?
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    44
    @SlipStupig 我以前昵称就是老太太. 正巧认识我的人也在 V2EX 混.

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

    我想是不是 CPU 不够快
    AlexaZhou
    AlexaZhou
    Feb 29, 2016
    48
    感觉楼主这个有点走偏了,满满的求 star 味道,这样求来的 star 是木有意义的

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

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

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

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

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

    也许是 TCP 连接数太大? 我考虑考虑得限制下并发连接数了.
    xlrtx
    xlrtx
    Feb 29, 2016
    59
    我也想写一个, 然后做个搜索站, 加上 aria2 的功能, 点击下载直接分配到家里的路由器上.
    welsmann
    welsmann
    Feb 29, 2016
    60
    之前初学 Python 时写过一个,不过当时做了额外的种子文件内容解析,后来数据多到付不起 VPS 费用干脆就关掉了...
    AlexaZhou
    AlexaZhou
    Feb 29, 2016
    61
    @CrazySpiderMan
    客气啦,我觉得 p2pspider 也很不错,这个想法很棒,再完善完善,可能成为一个超叼的开源项目

    大家一起加油⛽️⛽️
    msg7086
    msg7086
    Feb 29, 2016
    62
    @CrazySpiderMan 耐艹请支付对应的价格。低价又耐艹的 VPS 必然是辣鸡。
    jasontse
    jasontse
    Feb 29, 2016 via iPad
    63
    @CrazySpiderMan
    我刚才 SSH 回家里的 RPi 上运行,现在路由器的连接数全满。😹
    cnnblike
    cnnblike
    Feb 29, 2016
    64
    卧槽,这个好强啊!
    PandaSaury
    PandaSaury
    Feb 29, 2016
    65
    为毛没有 PHP 版本的?
    CupTools
    CupTools
    Feb 29, 2016
    66
    @CrazySpiderMan
    @jasontse

    机房 G 口,独服+SSD 在跑,仍然掉链。应该是哪里有内存泄漏了
    CupTools
    CupTools
    Feb 29, 2016
    67
    skylancer
    skylancer
    Feb 29, 2016
    68
    “这几天, 我用 Node.js 重写了我去年用 Python 写出的 DHT 爬虫 + BT 客户端 = P2P 爬虫. 为什么用 Node.js 重写呢? 除了我闲得蛋疼外, 还有个原因是 Node.js 在这个 Network IO 操作频繁的项目上, 性能非常非常牛逼, 占用也非常少! 不过代码难写倒是真的. 我花了好多天才重写出来”

    老实说我还以为是 MingGe 附体
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    69
    @skylancer 哈哈. 我喜欢 MingGe 的那狂放的气质. 搞程序就是要这么自大, 在别人的打击下, 成长得更快.
    123s
    123s
    Feb 29, 2016
    70
    你写构造函数还是用旧的写法啊。
    完全 ES6 化
    第一条就不符合,当然我只是吐槽一下而已,很好的项目。
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    71
    @123s 所以是待做嘛. 先实现, 再慢慢进化. 因为我一开始就不是很懂 ES6. ES5 + ES6 混着来的.
    hyq
    hyq
    Feb 29, 2016
    72
    已经运行起来!!!!四国义
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    73
    @CupTools 我看你 Linux 玩得挺转的. 我都忘了好多 Linux 命令了.
    leon3333
    leon3333
    Feb 29, 2016
    74
    有意思,已 star ,有时间玩一下
    bearqq
    bearqq
    Feb 29, 2016 via Android
    75
    有人吐槽连接数的问题,其实你的 python 版一样有,不要问我 vps 怎么被封的
    Garantion
    Garantion
    Feb 29, 2016
    76
    小心蜜罐。
    CrazySpiderMan
    CrazySpiderMan
    OP
    Feb 29, 2016
    77
    @Garantion 看样子你研究得还挺深的. 是的, 有蜜罐. 我见过好多次了.
    Garantion
    Garantion
    Feb 29, 2016
    78
    @CrazySpiderMan 看来老司机还留了一手啊……
    wbsdty331
    wbsdty331
    Feb 29, 2016
    79
    Ed2k Shareaza 呢
    CupTools
    CupTools
    Mar 1, 2016 via Android
    80
    @CrazySpiderMan 睡了一觉起来, 13M 。然而线程全部挂了
    julor
    julor
    Mar 1, 2016 via Android
    81
    @CrazySpiderMan ,我来歪个楼,既然不满意 python 怎么不用 golang ,这个需要用起来也很舒服。
    cha1
    cha1
    Mar 1, 2016
    82
    @CupTools 谢谢。我有个和楼主类似的项目,数据库用的是 MySQL 。看了下 RethinkDB ,直观的 web 显示界面,还有 Python 客户端接口很人性化呀。而且呢, RethinkDB 存储的是 JSON 数据,以后作 API 接口也很方便。

    不知道这东西有什么坑吗?新手,请指教~
    CupTools
    CupTools
    Mar 1, 2016❤️1
    83
    @zqhong 坑就是如果你用 filter 的话 RethinkDB 不会用 index 优化
    123s
    123s
    Mar 1, 2016
    84
    @CrazySpiderMan 好吧,没看到是 todo
    CrazySpiderMan
    CrazySpiderMan
    OP
    Mar 1, 2016
    85
    @julor 因为我喜欢全能型的编程语言. JavaScript / Node.js 正好. Golang 不能开发 Chrome 扩展. Golang 不能像 JavaScript/Node.js 那么方便开发跨平台的 PC 程序.
    hyq
    hyq
    Mar 1, 2016
    86
    golang 可以开发 chrome 扩展,详情参见 npapi
    iugo
    iugo
    Mar 1, 2016
    87
    以前没有接触过这样的协议, 也没深入过 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
    ttbt
    Mar 1, 2016
    88
    @AstroProfundis 擦擦 可以参考下我站的数据 bt0.com 希望能用上你的 code
    CrazySpiderMan
    CrazySpiderMan
    OP
    Mar 1, 2016
    89
    @ttbt 你站是个好网站! 我已收藏! 下了一个情色电影. :)
    ttbt
    ttbt
    Mar 1, 2016
    90
    @CrazySpiderMan 我什么都不知道 就不能下个科幻啥的么 捂脸
    kozora
    kozora
    Mar 2, 2016
    91
    @jasontse 抗投诉的比如俄罗斯这些可以吧?
    dismonday
    dismonday
    Mar 2, 2016
    92
    顶一下
    CrazySpiderMan
    CrazySpiderMan
    OP
    Mar 3, 2016
    93
    @CupTools 现在最新版爬虫已稳定了. 你可以去 github 瞅瞅.
    CupTools
    CupTools
    Mar 4, 2016 via Android
    94
    @CrazySpiderMan 🌚最近在研究朴素贝尔斯算法
    CupTools
    CupTools
    Mar 4, 2016 via Android
    95
    @CrazySpiderMan 建议用 Promise , callback 不堪入目
    CrazySpiderMan
    CrazySpiderMan
    OP
    Mar 4, 2016
    96
    @CupTools 对数据进行分类? Promise 以后再写, 这个目前不是重点. 不过我把这个需求提到 issue 去.
    wico77
    wico77
    Jun 4, 2016
    97
    作者对程序 bug 崩溃已经不 care 了。也不再维护了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1298 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 114ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.