python 爬取种子_Python开发实例分享bt种子爬虫程序和种子解析

这篇博客分享了一个Python实现的BT种子爬虫程序,它能自动爬取网络上的种子并将其hash码写入文件和数据库。同时,还提供了一个种子分析程序,用于从数据库中获取hash码并下载种子,通过bencode库解析种子信息,如文件名和大小。目前,对于多文件种子的解析还在完善中。
摘要由CSDN通过智能技术生成

看到网上也有开源的代码,这不,我拿来进行了二次重写,呵呵,上代码:

#encoding: utf-8

import socket

from hashlib import sha1

from random import randint

from struct import unpack, pack

from socket import inet_aton, inet_ntoa

from bisect import bisect_left

from threading import Timer

from time import sleep

import MySQLdb

from datetime import *

import time

from bencode import bencode, bdecode

BOOTSTRAP_NODES = [

("router.bittorrent.com", 6881),

("dht.transmissionbt.com", 6881),

("router.utorrent.com", 6881)

]

TID_LENGTH = 4

KRPC_TIMEOUT = 10

REBORN_TIME = 5 * 60

K = 8

def entropy(bytes):

s = ""

for i in range(bytes):

s += chr(randint(0, 255))

return s

def random_id():

hash = sha1()

hash.update( entropy(20) )

return hash.digest()

def decode_nodes(nodes):

n = []

length = len(nodes)

if (length % 26) != 0:

return n

for i in range(0, length, 26):

nid = nodes[i:i+20]

ip = inet_ntoa(nodes[i+20:i+24])

port = unpack("!H", nodes[i+24:i+26])[0]

n.append( (nid, ip, port) )

return n

def encode_nodes(nodes):

strings = []

for node in nodes:

s = "%s%s%s" % (node.nid, inet_aton(node.ip), pack("!H", node.port))

strings.append(s)

return "".join(strings)

def intify(hstr):

return long(hstr.encode('hex'), 16)

def timer(t, f):

Timer(t, f).start()

class BucketFull(Exception):

pass

class KRPC(object):

def __init__(self):

self.types = {

"r": self.response_received,

"q": self.query_received

}

self.actions = {

"ping": self.ping_received,

"find_node": self.find_node_received,

"get_peers": self.get_peers_received,

"announce_peer": self.announce_peer_received,

}

self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

self.socket.bind(("0.0.0.0", self.port))

def response_received(self, msg, address):

self.find_node_handler(msg)

def query_received(self, msg, address):

try:

self.actions[msg["q"]](msg, address)

except KeyError:

pass

def send_krpc(self, msg, ad

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值