手撕包菜磁力搜索引擎源码一键安装包

魔王先生 好文分享 1年前 9121℃ 0
摘要:

手撕包菜是一个基于DHT协议的BT资源搜索引擎,所有资源来源于爬虫24小时从DHT网络自动抓取,所有排行数据由程序自动生成。我们不存储任何资源和种子文件,只索引种子meta信息并提供搜索服...

手撕包菜是一个基于DHT协议的BT资源搜索引擎,所有资源来源于爬虫24小时从DHT网络自动抓取,所有排行数据由程序自动生成。我们不存储任何资源和种子文件,只索引种子meta信息并提供搜索服务。

磁力链接是一种新型的分享形式,每个链接对应一个BT种子文件。您可以通过软件下载磁力链接指向的资源,例如迅雷、BitComet、QQ旋风,也可以使用云点播服务在线观看影视资源,例如迅雷云播、百度云盘等。

#!/bin/bash
#changelog:
#1.1添加开机自启动功能
#1.2修改pip获取方式
#1.3考虑到精简版系统的情况,自动安装wget与net-tools
python -V         
systemctl stop firewalld.service 
systemctl disable firewalld.service  
systemctl stop iptables.service 
systemctl disable iptables.service 
yum -y install wget
#如果使用linode主机,请取消下面4行的注释
#wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyuncs.com/repo/Centos-7.repo
#wget -qO /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#yum clean metadata
#yum makecache
cd ~
wget https://github.com/78/ssbc/archive/master.zip
yum -y install unzip
unzip master.zip
#解压后 源码在/root/ssbc-master目录
yum -y install gcc
yum -y install gcc-c++
yum -y install python-devel
yum -y install mariadb
yum -y install mariadb-devel
yum -y install mariadb-server
cd ssbc-master
yum -y install epel-release
yum -y install  python-pip
pip install -r requirements.txt
pip install  pygeoip
systemctl start  mariadb.service
mysql -uroot  -e"create database ssbc default character set utf8;" 
sed -i '/!includedir/a\wait_timeout=2880000\ninteractive_timeout = 2880000\nmax_allowed_packet = 512M' /etc/my.cnf
mkdir  -p  /data/bt/index/db /data/bt/index/binlog  /tem/downloads
chmod  755 -R /data
chmod  755 -R /tem
yum -y install unixODBC unixODBC-devel postgresql-libs
wget http://sphinxsearch.com/files/sphinx-2.2.9-1.rhel7.x86_64.rpm
rpm -ivh sphinx-2.2.9-1.rhel7.x86_64.rpm
systemctl restart mariadb.service 
systemctl enable mariadb.service
searchd --config ./sphinx.conf
python manage.py makemigrations
python manage.py migrate
indexer -c sphinx.conf --all
ps aux|grep searchd|awk '{print $2}'|xargs kill -9
searchd --config ./sphinx.conf
#启动网站并在后台运行
nohup python manage.py runserver 0.0.0.0:80 >/dev/zero 2>&1&   
yum -y install net-tools
myip=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
while true; do
    read -p "确定浏览器能访问网站  http://$myip  吗?[y/n]" yn
    case $yn in
        [Yy]* ) cd workers; break;;
        [Nn]* ) exit;;
        * ) echo "请输入yes 或 no";;
    esac
done
#运行爬虫并在后台运行
nohup python simdht_worker.py >/dev/zero 2>&1&
#定时索引并在后台运行
nohup python index_worker.py >/dev/zero 2>&1& 
cd ..
python manage.py createsuperuser
#开机自启动
chmod +x /etc/rc.d/rc.local
echo "systemctl start  mariadb.service " >> /etc/rc.d/rc.local
echo "cd /root/ssbc-master " >> /etc/rc.d/rc.local
echo "indexer -c sphinx.conf --all " >> /etc/rc.d/rc.local
echo "searchd --config ./sphinx.conf " >> /etc/rc.d/rc.local
echo "nohup python manage.py runserver 0.0.0.0:80 >/dev/zero 2>&1& " >> /etc/rc.d/rc.local
echo "cd workers " >> /etc/rc.d/rc.local
echo "nohup python simdht_worker.py >/dev/zero 2>&1& " >> /etc/rc.d/rc.local
echo "nohup python index_worker.py >/dev/zero 2>&1& " >> /etc/rc.d/rc.local

===============================================================

上面的脚本已经做好并命名为ssbc.sh。上传到你的服务器上(我的路径是/root/下),运行脚本输入命令:

chmod 777 ssbc.sh
sh ssbc.sh

安装过程中会提示输入管理员用户名、密码、邮箱,输入后耐心等待即可访问http://IP

后台地址http://IP/admin

===============================================================

中文模板使用方法:ssbczw.zip

下载模板后解压然后用WinSCP等ftp工具上传到/root/ssbc-master/web/这个目录,选择全部替换。

这样基本上全部的配置就完成了,reboot重启搞定收工!

============================更新===============================

增加入库黑名单机制。下载ssbchmd.rar,下载后可直接使用,内附使用说明书。

========================代码常见问题===========================

必须centos7吗?

非常建议使用centos7,centos6可能会有意想不到的错误

————————————————————————————————————

如何设置首页关键字?

登录管理员后台,点击Rec keywordss,右上角新增

————————————————————————————————————

怎么查看入库的文件?

登录管理员后台,点击 Hashs 

————————————————————————————————————

怎么查看每天入库了多少文件,以便清楚入库效率?

登录管理员后台,点击 Status reports 

————————————————————————————————————

如何确认web服务器、采集、入库正在运行?

运行

ps -ef|grep python

结果里面如果有下面的代码:

python manage.py runserver 0.0.0.0:80
python simdht_worker.py
python index_worker.py

即表示正在运行。

————————————————————————————————————

去除搜索页 右下角广告

[root@localhost ssbc-master]# cd web/static/js
[root@localhost js]# vi ssbc.js   找到如下3行,在前面添加//进行注释,保存
// document.write('<script src="http://v.6dvip.com/ge/?s=47688"><\/script>');
// document.writeln("<script language=\"JavaScript\" type=\"text/javascript\" src=\"http://js.6dad.com/js/xiaoxia.js\"></script>");
// document.writeln("<script language=\"JavaScript\" type=\"text/javascript\" src=\"http://js.ta80.com/js/12115.js\"></script>");

————————————————————————————————————

如何修改扩展名归类?

workers/metautils.py文件中有如下代码:

def get_category(ext):
    ext = ext + '.'
    cats = {
        u'video': '.avi.mp4.rmvb.m2ts.wmv.mkv.flv.qmv.rm.mov.vob.asf.3gp.mpg.mpeg.m4v.f4v.',
        u'image': '.jpg.bmp.jpeg.png.gif.tiff.',
        u'document': '.pdf.isz.chm.txt.epub.bc!.doc.ppt.',
        u'music': '.mp3.ape.wav.dts.mdf.flac.',
        u'package': '.zip.rar.7z.tar.gz.iso.dmg.pkg.',
        u'software': '.exe.app.msi.apk.'
    }

意思是:扩展名为.exe、.app、.msi、,.apk的文件都属于software类型。

如果你把u'software': '.exe.app.msi.apk.' 改为 u'software': 'app.msi.apk.',那么exe将会被归为other类型。

所以在这里修改归类设置。

————————————————————————————————————

如何禁止某些格式/分类的文件入库?

workers/metadata.py文件中有如下代码:

info['extension'] = metautils.get_extension(bigfname).lower()
info['category'] = metautils.get_category(info['extension'])

所以如果你要排除扩展名为.exe的文件,或者类型为software,可以在上面代码后面加上

##########这是增加的过滤-开始############
#按扩展名过滤,禁止扩展名为.exe的入库
if info['extension'] == 'exe':
    return # 直接返回,跳过下面的入库
#按文件类型过滤,禁止类型为software的入库
if info['category'] == 'software':
    return
#禁止类型为other的入库
if info['category'] == 'other':
    return
##########这是增加的过滤-结束############

————————————————————————————————————

如何重建索引?

第一步:

删除/data目录

第二步:

进入数据库,把search_hash表中所有记录的tagged字段置为0。

UPDATE search_hash SET tagged=0

然后启动sphinx、index_worker.py。

————————————————————————————————————

MySQL server has gone away提示怎么办?

ssbc 运行一段时间后,大概半个小时,就莫名奇妙停止不爬了。 错误提示如下:

MySQL server has gone away

通过错误提示可以看出,其实是ssbc与mysql(maridb)断开连接了,导致程序异常,当然就插入不了数据了。

有3种解决办法:

方法1是写个脚本,定时重启爬虫。 附件中的 ssbc-reboot.sh 脚本就是定时重启用的,需要配合Centos定时任务一起使用,命令如下(注意自己脚本上传的地址,下面是我用的地址举例,时间自己定,我的是30分钟自动重启爬虫):

yum -y install vixie-cron crontabs
crontab -e
/30 * * * * sh /root/ssbc-reboot.sh

方法2是修改下代码,当mysql断开连接时,再次重连mysql就可以拉。

index_worker.py是用来建立索引,和simdht_worker.py问题一样,运行一会儿就停止,导致无法搜索到新数据。所以也需要修复下,替换的这2个文件已经在下面的下载文档中了,目录是 /ssbc-master/workers/。

方法3是修改Mysql配置,将闲置时间wait_timeout设置长一点,在/etc/my.cnf最后一行的下面添加:

wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 512M

————————————————————————————————————

哪里设置爬虫线程?让爬虫爬快/慢点?

在workers/simdht_worker.py里面把MAX_QUEUE_LT、MAX_QUEUE_PT、max_node_qsize设大/小一点。

————————————————————————————————————

如何关闭调试模式?设置404页面?(我自己也试了好几次,发现不是很好用,索性不去管它了,就调试模式了)

请参考 http://www.githubs.cn/post/19

————————————————————————————————————

如何在搜索结果页面添加迅雷链接?

在web/views.py文件加入以下代码生成迅雷链接:

import base64
xunleiurl = 'AAmagnet:?xt=urn:btih:' + d['info']['info_hash'] + 'ZZ'
d['xunlei_url'] = 'thunder://' + base64.b64encode(xunleiurl)

可以在模板中用“ {{xunlei_url}} ”调用。位置要放在return render(request, 'info.html', d)的前面。

————————————————————————————————————

SSBC如何搬家?

数据库用mysqldump导出sql,在新服务器上运行一键包,再导入刚才的sql。

————————————————————————————————————

提示duplicate id 'xxxx'解决办法

进入数据库,执行语句

update search_hash set tagged=True where id=xxxx;

————————————————————————————————————

Q:如何限制爬取速度?

A:修改simdht_worker.py里的max_node_qsize=后面的数字

Q:修改数据库密码后怎么修改程序里的配置?

A:修改manage.py里的mysql+pymysql://root:后面的内容、修改simdht_worker.py里的DB_PASS、修改sphinx.conf里的sql_pass

————————————————————————————————————

搜索中文报错

‘ascii’ codec can’t encode characters in position 42-43: ordinal not in range(128)

解决办法:

如果是centos7系统,修改/usr/lib64/python2.7/site.py

vi  /usr/lib64/python2.7/site.py

在import sys下添加2行:

reload(sys)
sys.setdefaultencoding('utf8')

===============================================================

所有相关文件的下载地址:

链接:http://pan.baidu.com/s/1o8qdpGY 密码:2atu


发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。