[初学Python]利用某网站的功能写一个磁力链转种子工具

孔子曰:学而时习之~

初学python,一边看语法,一边看参考例程,写了一个小程序,做个存档,否则很容易忘记。

这次的目标是利用某种子下载网站,编写一个磁力链下载种子文件的工具。

常见的种子文件磁力链接的格式是这样的:magnet:?xt=urn:btih:XXX

其中的XXX就是种子文件的哈希值,而这个网站可以输入哈希值,下载对应的种子文件,

但是该网站广告内容太多了,用浏览器打开不太方便呀~,具体是哪个网站我就不说了,哈哈~~~,自己看代码吧。

# 磁力链接转种子文件
# QQ:446252221 <[email protected]>
import io
import os
import time
import urllib.request
import urllib.parse
import html.parser

USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

#HTML解析
class html_dumper(html.parser.HTMLParser):
    
    def __init__(self):
        html.parser.HTMLParser.__init__(self)
        self.key = ""
        
    def handle_starttag(self, tag, attrs):
        if tag == "input":
            if attrs[1][1] == "key":
                self.key = attrs[2][1]
        return None
        
    def handle_data(self, data):
        return None
            
    def handle_comment(self, data):
        return None
        
    def get_key(self):
        return self.key
        
#第1步获取key
def step1_get_key(hash):
    req_url = "http://www.storetorrents.com/hash/" + hash
    req = urllib.request.Request(url=req_url, method="GET")
    req.add_header("User-Agent", USER_AGENT)
    try:
        respon = urllib.request.urlopen(req)
        #print("第1步:", respon.status)
        respon_cook = respon.getheader("Set-Cookie")
        respon_body = respon.read()
        dumper = html_dumper()
        dumper.feed(respon_body.decode("utf-8"))
        #print("key:", dumper.get_key())
        return dumper.get_key()
    except BaseException as e:
        print("urlopen error:", e)
        return None
        
#第2步获取captcha
def step2_get_captcha():
    req_url = "https://storetorrents.xyz/captcha"
    req = urllib.request.Request(url=req_url, method="GET")
    req.add_header("User-Agent", USER_AGENT)
    #req.add_header("Cookie", "__cfduid=dac7712102a83c5d8e2d3fb4ec6f407031553505032; PHPSESSID=25d2d5kd6erdqbo1fv4o4e8vs2")
    try:
        respon = urllib.request.urlopen(req)
        #print("第2步:", respon.status)
        respon_body = respon.read()
        respon_cook = respon.getheader("Set-Cookie")
        file_name = "captcha.jpg"
        file_obj = open(file_name, "wb")
        file_obj.write(respon_body)
        file_obj.close()
        os.system(file_name)
        #print("cookie:", respon_cook)
        cookie_list = respon_cook.split(";", -1)
        cookie = cookie_list[0] + ";" + cookie_list[5].split(",", 1)[1]
        #print("cookie:", cookie)
        return cookie
    except BaseException as e:
        print("urlopen error:", e)
        return None
    
    
#第3步下载文件
def step3_download(key, hash, captcha, cookie):
    req_url = "https://storetorrents.xyz/download"
    req_values = {}
    req_values["key"] = key
    req_values["infohash"] = hash
    req_values["captcha"] = captcha
    req_body = urllib.parse.urlencode(req_values)
    #print("key encode:", req_body)
    req = urllib.request.Request(url=req_url, method="POST", data=bytes(req_body, encoding="utf8"))
    req.add_header("User-Agent", USER_AGENT)
    req.add_header("Cookie", cookie)
    try:
        respon = urllib.request.urlopen(req)
        #print("第3步:", respon.status)
        type = respon.getheader("Content-Type")
        #print("Type:", type)
        if type.startswith("text/html"):
            print(respon.read().decode("utf-8"))
            return None
        respon_body = respon.read()
        file_name = hash + ".torrent"
        file_obj = open(file_name, "wb")
        file_obj.write(respon_body)
        file_obj.close()
        print("下载完成!")
    except BaseException as e:
        print("urlopen error:", e)
    return None
    
#入口
os.system("title 磁力转换工具")
os.system("echo off")
while(True):
    hash = input("magnet:?xt=urn:btih:")
    key = step1_get_key(hash)
    if key == None:
        print("未找到该资源!")
        os.system("pause")
        continue
    cookie = step2_get_captcha()
    if cookie == None:
        print("获取验证码失败!")
        os.system("pause")
        continue
    code = input("请输入验证码:")
    step3_download(key, hash, code, cookie)
    os.system("pause")
    

 

简单解释一下代码内容:

整体流程是:

1.访问A页面,解析HTML得到其中的重要参数key.

2.访问B页面,得到cookie和验证码.

3.输入验证码:由于python显示图片要用第三方库实现,所以暂时没有用代码实现。取而代之的是下载图片,然后用Windows系统图片查看器打开它,然后人工识别验证码。

4.访问C页面,下载种子文件,这个页面使用POST方式请求,并附加B页面得到的cookie和3个参数:由A页面得到的key,由B页面得到的验证码,和种子文件的哈希值。

5.下载C页面返回的数据写入到文件,这就是我们要的种子文件啦。

 

你可能感兴趣的:(python,学习笔记)