loop_in_codes

低调做技术__欢迎移步我的独立博客 codemaro.com 微博 kevinlynx

使用erlang实现P2P磁力搜索(开源)

接上回对DHT网络的研究,我用erlang克隆了一个磁力搜索引擎。我这个实现包含了完整的功能,DHT网络的加入、infohash的接收、种子的获取、资源信息的索引、搜索。

如下图:

screenshot

在我的笔记本上,我开启了100个DHT节点,大致均匀地分布在DHT网络里,资源索引速度大概在1小时一万个左右(包含重复资源)。

这个程序包含三大部分:

这两个项目总共包含大概2500行的erlang代码。其中,DHT实现部分将DHT网络的加入包装成一个库,爬虫部分在搜索种子时,暂时没有使用P2P里的种子下载方式,而是使用现成的磁力链转种子的网站服务,这样我只需要使用erlang自带的HTTP客户端就可以获取种子信息。爬虫在获取到种子信息后,将数据存储到mongodb里。WEB端我为了尽量少用第三方库,我只好使用erlang自带的HTTP服务器,因此网页内容的创建没有模板系统可用,只好通过字符串构建,编写起来不太方便。

使用

整个程序依赖了两个库:bson-erlang和mongodb-erlang,但下载依赖库的事都可以通过rebar解决,项目文件里我已经包含了rebar的执行程序。我仅在Windows7上测试过,但理论上在所有erlang支持的系统上都可以。

  • 下载安装mongodb
  • 进入mongodb bin目录启动mongodb,数据库目录保存在db下,需手动建立该目录

      mongod --dbpath db --setParameter textSearchEnabled=true
    
  • 下载erlang,我使用的是R16B版本

  • 下载dhtcrawler,不需要单独下载kdht,待会下载依赖项的时候会自动下载

      git clone git@github.com:kevinlynx/dhtcrawler.git
    
  • cmd进入dhtcrawler目录,下载依赖项前需保证环境变量里有git,例如D:\Program Files (x86)\Git\cmd,需注意不要将bash的目录加入进来,使用以下命令下载依赖项

      rebar get-deps
    
  • 编译

      rebar compile
    
  • 在dhtcrawler目录下,启动erlang

      erl -pa ebin
    
  • 在erlang shell里运行爬虫,erlang语句以点号(.)作为结束

      crawler_app:start().
    
  • erlang shell里运行HTTP服务器

      crawler_http:start().
    
  • 浏览器里输入localhost:8000/index.html,这个时候还没有索引到资源,建议监视网络流量以观察爬虫程序是否正确工作

爬虫程序启动时会读取priv/dhtcrawler.config配置文件,该文件里配置了DHT节点的UDP监听端口、节点数量、数据库地址等,可自行配置。

接下来我会谈谈各部分的实现方法。

posted on 2013-06-20 14:44 Kevin Lynx 阅读(7749) 评论(9)  编辑 收藏 引用 所属分类: networkerlang

评论

# re: 使用erlang实现P2P磁力搜索(开源) 2014-01-19 11:28 苏堤

因为不懂程序,请问有木有完成好的网页源码?  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2014-03-18 22:46 磁力搜索

欢迎体验http://btbook.net/  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2014-08-05 21:07 taojiaen

rebar显示 Dependency not available 是什么意思啊  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2014-12-01 10:36 DHTSEEK

www.dhtseek.com已经在用,谢谢  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2014-12-04 20:46 于涛

@磁力搜索
@DHTSEEK
请问网站源码出售吗?请问楼主的程序可以付费调试吗?
  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2015-01-17 11:28 Rebar

F:\Program Files\dhtcrawler-master>rebar get-deps
==> dhtcrawler-master (get-deps)
Uncaught error in rebar_core: {'EXIT',
{badarg,
[{re,split,
[[84,69,83,83,68,65,84,65,95,80,82,69,70,73,
88,61,70,58,92,28779,36710,22836,20225,
19994,29256,92,83,121,115,116,101,109,92,
116,101,115,115,100,97,116,97,92],
"=",
[{return,list},{parts,2}]],
[{file,"re.erl"},{line,154}]},
{rebar_port_compiler,'-os_env/0-lc$^0/1-0-',
1,[]},
{rebar_port_compiler,'-os_env/0-lc$^0/1-0-',
1,[]},
{rebar_port_compiler,os_env,0,[]},
{rebar_port_compiler,setup_env,1,[]},
{rebar_core,'-setup_envs/2-lc$^0/1-0-',2,[]},
{rebar_core,setup_envs,2,[]},
{rebar_core,execute,4,[]}]}}
我在本地运行rebar get-deps出现这个错误,楼主帮忙 看下是什么问题啊?没玩过,不知道怎么弄。  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2015-08-11 17:28 DHTSEEK

DHTSEEK百度收录100多万页面啦,目前系统已开源,欢迎下载,地址 http://dwz.cn/1gL7Bl  回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2015-08-11 17:29 DHTSEEK

@于涛
DHTSEEK百度收录100多万页面啦,目前系统已开源,欢迎下载,地址 http://dwz.cn/1gL7Bl   回复  更多评论   

# re: 使用erlang实现P2P磁力搜索(开源) 2016-03-04 16:35 虾米

@DHTSEEK
无法购买啊 ··  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理