自建磁力鏈搜索網站做老司機之ZSKY

簡介

下載類的網站應該是大家經常用到的工具了,特別是一些 BT,PT 一類的網站,最近幾年比較火的小型站點一般都是磁力搜索類的,但很多網站魚龍混雜,廣告橫生(網站掛廣告無可厚非,但是時不時彈出令人尷尬的內容就有點兒嗯。。)

直接附上相關的說明(註:這類磁力搜索的網站實際上是利用 Python 爬去 DHT 網路中的信息,因此,基本不需要手動維護內容)

官方說明

在 ssbc 爬蟲的基礎上修復,現在可以 7*24 爬取的爬蟲,修改了爬取策略,只入庫音樂、電影、電子書。python 實現的磁力搜索網站,代碼比較爛,請輕噴!

搜索排行榜、瀏覽排行榜、DMCA 投訴的功能未完成(其實是不想做)

和 ssbc 相比,沒使用 sphinx 進行索引,而是用 redis 緩存訪問頁面,使用 jieba 分詞,比 sphinx 的中文分詞效果好。

Advertisements

模板在 templates 目錄,模板引擎是 jinja2(非常易讀),編寫自己的專屬模板非常方便,中文版文檔 http://docs.jinkan.org/docs/jinja2/ 。

後台可以直接搜索、刪除 DMCA 投訴的關鍵字,管理首頁推薦關鍵字、用戶搜索記錄、查看每天爬取的資源數量、管理後台用戶。

修改資料庫密碼后請修改 manage.py 裡面的 mysql+pymysql://root: 後面的內容和 simdht_work.py 裡面的 DB_PASS

實驗環境:centos7 python2.7

新安裝

Github 地址:https://github.com/wenguonideshou/zsky

複製代碼

Advertisements

yum -y install git

git clone https://github.com/wenguonideshou/zsky.git

cd zsky

sh zsky.sh

原安裝及環境配置

複製代碼

#下載源文件(到Github找最新版下載)

tar zxvf zsky.tar.gz

systemctl stop firewalld.service

systemctl disable firewalld.service

systemctl stop iptables.service

systemctl disable iptables.service

setenforce 0

sed -i s/\"SELINUX=enforcing\"/\"SELINUX=disabled\"/g /etc/sysconfig/selinux

#關閉selinux

cat << EOF > /etc/sysctl.conf

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_retries2 = 5

net.ipv4.tcp_fin_timeout = 2

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_wmem = 8192 131072 16777216

net.ipv4.tcp_rmem = 32768 131072 16777216

net.ipv4.tcp_mem = 786432 1048576 1572864

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.ip_conntrack_max = 65536

net.ipv4.netfilter.ip_conntrack_max=65536

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180

net.core.somaxconn = 16384

net.core.netdev_max_backlog = 16384

EOF

/sbin/sysctl -p /etc/sysctl.conf

/sbin/sysctl -w net.ipv4.route.flush=1

echo ulimit -HSn 65536 >> /etc/rc.local

echo ulimit -HSn 65536 >>/root/.bash_profile

ulimit -HSn 65536

#優化內核參數,優化打開文件數

cd zsky

yum -y install wget gcc gcc-c++ python-devel mariadb mariadb-devel mariadb-server

yum -y install epel-release python-pip redis

pip install -r requirements.txt

pip install redis

systemctl start mariadb.service

systemctl enable mariadb.service

systemctl start redis.service

systemctl enable redis.service

mysql -uroot -e\"create database zsky default character set utf8mb4;\"

mysql -uroot -e\"set global interactive_timeout=31536000;set global wait_timeout=31536000;set global max_allowed_packet = 64*1024*1024;set global max_connections = 10000;\"

python manage.py init_db

#建表

python manage.py create_user

#按照提示輸入用戶名、密碼、郵箱

nohup gunicorn -k gevent --access-logfile zsky.log --error-logfile zsky_err.log manage:app -b 0.0.0.0:80 --reload>/dev/zero 2>&1&

#開啟網站訪問,訪問日誌是當前目錄下zsky.log,錯誤日誌是當前目錄下zsky_err.log

#如果不想要日誌 就運行下面這條命令

#nohup gunicorn -k gevent manage:app -b 0.0.0.0:80 --reload>/dev/zero 2>&1&

nohup python simdht_worker.py 2>&1&

#開啟爬蟲並寫日誌,如果爬蟲有問題請提交日誌文件nohup.out給我

現在應該能訪問http://IP 了,解析域名即可完成部署

後台地址http://IP/admin

#開機自啟動

chmod +x /etc/rc.d/rc.local

echo \"systemctl start mariadb.service\" >> /etc/rc.d/rc.local

echo \"systemctl start redis.service\" >> /etc/rc.d/rc.local

echo \"cd /root/zsky\" >> /etc/rc.d/rc.local

echo \"nohup python simdht_worker.py >/dev/zero 2>&1&\" >> /etc/rc.d/rc.local

echo \"nohup gunicorn -k gevent manage:app -b 0.0.0.0:80 --reload>/dev/zero 2>&1&\" >> /etc/rc.d/rc.local

使用說明

Quote:

安裝腳本執行過程中會提示輸入綁定的域名、資料庫密碼、管理員用戶名、密碼、郵箱,輸入后耐心等待即可訪問 http://域名

後台地址 http://域名/admin

程序默認資料庫密碼123456

修改simdht_worker.py里的max_node_qsize的大小調節爬取速度(隊列大小)

執行 python manage.py init_db 創建表/平滑升級表結構

執行 python manage.py create_user 創建管理員

執行 python manage.py changepassword 修改管理員密碼

執行 systemctl start gunicorn 啟動網站

執行 systemctl start mariadb 啟動資料庫

執行 systemctl status mariadb 查看資料庫運行狀態

執行 systemctl restart mariadb 重新啟動資料庫

執行 systemctl status gunicorn 查看gunicorn運行狀態

執行 systemctl restart gunicorn 重新啟動網站

執行 systemctl restart indexer 手動重新索引

執行 systemctl start searchd 開啟搜索進程

執行 systemctl status searchd 查看搜索進程運行狀態

執行 systemctl restart searchd 重新啟動搜索進程

Q:如何修改站點名?

A:修改manage.py里的常量sitename

Q:如何修改地圖裡的域名?

A:修改manage.py里的常量domain

Q:如何實現遠程主機反向代理本機的程序?

A:修改本機的/etc/systemd/system/gunicorn.service其中的127.0.0.1:8000修改為0.0.0.0:8000然後執行systemctl daemon-reload,然後執行systemctl restart gunicorn,本機不開啟nginx,遠程主機開啟nginx、配置反向代理、綁定域名即可,nginx的配置文件參考程序內的nginx.conf 。

Q:如何限制/提高爬取速度?

A:修改simdht_worker.py里的max_node_qsize=後面的數字,越大爬取越快,越小爬取越慢

Q:如何修改資料庫密碼?

A:執行mysqladmin -uroot -p password 123456!@#$%^ //將提示輸入當前密碼,123456!@#$%^是新密碼

Q:修改資料庫密碼后怎麼修改程序里的配置?

A:修改manage.py里的mysql+pymysql://root:密碼@127.0.0.1、修改manage.py里的DB_PASS、修改simdht_worker.py里的DB_PASS、修改sphinx.conf里的sql_pass

Q:怎麼確定爬蟲是在正常運行?

A:執行 ps -ef|grep -v grep|grep simdht 如果有結果說明爬蟲正在運行

Q:更新manage.py/模板后怎麼立即生效?

A:執行 systemctl restart gunicorn 重啟gunicorn

Q:為什麼首頁統計的數據小於後台的數據?

A:在數據量變大后,索引將佔用CPU 100%,非常影響用戶訪問網站,為了最小程度減小此影響 默認設置為每天早上5點更新索引,你想現在更新爬取結果的話,手動執行索引 systemctl restart indexer ,需要注意的是,數據量越大 索引所耗費時間越長

Q:如何查看索引是否成功?

A:執行 systemctl status indexer 可以看到索引記錄

Q:覺得索引速度慢,如何加快?

A:修改sphinx.conf裡面的mem_limit = 512M ,根據你的主機的內存使用情況來修改,數值越大索引越快,最大可以設置為2048M

Q:如何確定搜索進程是否正常運行

A:執行 systemctl status searchd ,如果是綠色的running說明搜索進程完全正常

Q:如何備份資料庫?

A:執行 mysqldump -uroot -p zsky>/root/zsky.sql 導出資料庫 //將提示輸入當前密碼,資料庫導出后存在/root/zsky.sql

Q:資料庫備份后,現在重新安裝了程序,如何導入舊數據?

A:執行 mysql -uroot -p zsky</root/zsky.sql //假設你的舊資料庫文件是/root/zsky.sql,將提示輸入當前密碼,輸入后耐心等待

Q:如何遷移到新主機?

A:備份資料庫(方法見上面)→ 程序拷貝到新主機 → 安裝程序 → 導入資料庫(方法見上面)→ 重新索引

Q:我以前使用的搜片大師/手撕包菜,可以遷移過來嗎?

A:程序在開發之初就已經考慮到從這些程序遷移過來的問題,所以你不用擔心,完全可以無縫遷移。

Q:網站經常收到版權投訴,有沒有好的解決辦法?

A:除了刪除投訴的影片數據外,你可以使用前端Nginx、後端gunicorn+爬蟲+資料庫+索引在不同主機上的模式,甚至多前端模式,這樣 即使前端被主機商強行封機,也能保證後端數據的安全。

Advertisements

你可能會喜歡