批量获取 Btsow 网站搜索到的磁力链接

news2024/11/28 20:41:12

BTSOW 是个不错的种子或磁力链接搜索网站,本脚本可以按需要批量抓取 磁力链接(老司机必备)
功能:
1.获取最新地址(网站经常失联)
2.最多50页内容(网站限制)
3.结果生成CSV文件(可用excel打开后进一步筛选文件尺寸,剔除小文件) 

 

代码:

from bs4 import BeautifulSoup
import requests
import re
import datetime
import pyperclip
import time
import subprocess
from time import sleep
import random
import csv
from urllib.parse import quote
 
x = datetime.datetime.now()
print('任务开始于:'+str(x)+'\n')
today=x.strftime("%Y")+'-'+x.strftime("%m")+'-'+x.strftime("%d")
#print(today)
 
s = requests.Session()
 
 
 
 
Headers={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.50'
     
}
 
tellme_url='https://tellme.pw/bts'
 
reponse = s.get(url=tellme_url,headers=Headers)
# print(reponse.text)
soup= BeautifulSoup(reponse.text,'lxml')
# print(soup.prettify())
h2_tag = soup.find('h2')
new_url=h2_tag.a['href']
print('最新网址:\t'+new_url)
 
gjc=input("关 键 词:\t")
 
 
 
 
 
 
 
 
 
 
 
 
 
seach_url = new_url+'/search/'+quote(gjc)
# print(seach_url)
reponse=s.get(url=seach_url,headers=Headers)
# print(reponse.text)
 
mag=[]
title=[]
sizenum=[]
date=[]
 
# pagination pagination-lg
# /html/body/div[2]/div[7]/ul/li[1]
# body > div.container > div:nth-child(9) > ul > li.hidden-xs.active
maxpage=0
 
# maxpage<=50
for p in range(1,52):
    html=s.get(seach_url+'/page/'+str(p),headers=Headers)
    allhtml=html.text
    if p==1:
        print('正在尝试:\t'+seach_url+'/page/'+str(p))
        soup= BeautifulSoup(allhtml,'lxml')
        data_list=soup.find_all("a",{"href":re.compile("\/\/btsow\.*?"),"title":re.compile('.*?')})
        for i in data_list:
            mag.append('magnet:?xt=urn:btih:'+i.get('href')[-40:])
            title.append(i.get('title'))
            soup=BeautifulSoup(str(i),"lxml")
            size=soup.find("div",{"class":re.compile('.*?size')})
            info=size.get_text().split(" / ")
            sizen=info[0][5:-2]
            sizedw=info[0][-2:]
            if sizedw=="TB":
                sizenum.append(float(sizen)*1024**2)
            elif sizedw=="GB":
                sizenum.append(float(sizen)*1024)
            elif sizedw=="MB":
                sizenum.append(float(sizen))
            elif sizedw=="KB":
                sizenum.append(float(sizen)/1024)
            else:
                sizenum.append(0)
 
            date.append(info[1][13:])
    if p > 1:
        soup=BeautifulSoup(allhtml,'lxml')
        page=soup.find("ul",{"class":'pagination pagination-lg'})
        # if page.txt.find("Next")
        if page == None:
            maxpage=p-1
            break
        else:
            print('正在尝试:\t'+seach_url+'/page/'+str(p))
            soup= BeautifulSoup(allhtml,'lxml')
            data_list=soup.find_all("a",{"href":re.compile("\/\/btsow\.*?"),"title":re.compile('.*?')})
            for i in data_list:
                mag.append('magnet:?xt=urn:btih:'+i.get('href')[-40:])
                title.append(i.get('title'))
                soup=BeautifulSoup(str(i),"lxml")
                size=soup.find("div",{"class":re.compile('.*?size')})
                info=size.get_text().split(" / ")
                sizen=info[0][5:-2]
                sizedw=info[0][-2:]
                if sizedw=="TB":
                    sizenum.append(float(sizen)*1024**2)
                elif sizedw=="GB":
                    sizenum.append(float(sizen)*1024)
                elif sizedw=="MB":
                    sizenum.append(float(sizen))
                elif sizedw=="KB":
                    sizenum.append(float(sizen)/1024)
                else:
                    sizenum.append(0)
 
                date.append(info[1][13:])
    sleep(random.randint(1,10))
 
 
 
 
 
 
 
 
# soup= BeautifulSoup(allhtml,'lxml')
# # print(soup.text)
# # print(soup.get_text)
# # data_list=soup.find("div",{'class':"data-list"})
# # print(data_list)
# # print(type(data_list))
# # soup= BeautifulSoup(data_list.text,"lxml")
# data_list=soup.find_all("a",{"href":re.compile("\/\/btsow\.*?"),"title":re.compile('.*?')})
 
 
 
 
 
# for i in data_list:
#     mag.append('magnet:?xt=urn:btih:'+i.get('href')[-40:])
#     title.append(i.get('title'))
#     soup=BeautifulSoup(str(i),"lxml")
#     size=soup.find("div",{"class":re.compile('.*?size')})
#     info=size.get_text().split(" / ")
#     sizen=info[0][5:-2]
#     sizedw=info[0][-2:]
#     if sizedw=="TB":
#         sizenum.append(float(sizen)*1024**2)
#     elif sizedw=="GB":
#         sizenum.append(float(sizen)*1024)
#     elif sizedw=="MB":
#         sizenum.append(float(sizen))
#     elif sizedw=="KB":
#         sizenum.append(float(sizen)/1024)
#     else:
#         sizenum.append(0)
 
#     date.append(info[1][13:])
# sleep(random.randint(1,10))
        # print("%s\n%s\n%s\nMB\n%s\n" %(mag,title,sizenum,date))
# maxindex=sizenum.index(max(sizenum))
# print('magnet:?xt=urn:btih:'+mag[maxindex] +'  '+title[maxindex])
 
# print(len(mag))
# print(len(title))
# print(len(sizenum))
 
 
 
 
if len(mag)==0:
    print('未找到任何资源')
 
 
if len(mag)>0:
    print('最大页数:\t',maxpage)
    print('链接数量:\t',len(mag))
    print('详细内容:')
    for i in range(len(mag)):
        print(mag[i]+'\t'+str(sizenum[i])+'\t\t'+title[i])
if maxpage>1:
    rows = zip(title, mag, sizenum ,date)
    # print(len(rows))
    with open(gjc+'.csv', mode='w', newline='',encoding='utf-8-sig') as file:
        writer = csv.writer(file)
        writer.writerow(['种子名','磁力链接', '文件大小(单位:MB)', '日期'])
        for row in rows:
            writer.writerow(row)
        print('写入文件:\t'+gjc+'.csv')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1286425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全网最新最牛的Appium自动化:Appium常用操作之TouchAction操作

TouchAction操作 Appium的辅助类&#xff0c;主要针对手势操作&#xff0c;比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中&#xff0c;然后将该链条传递给服务器。服务器接受到该链条后&#xff0c;解析各个动作&#xff0c;逐个执行。 TouchAction类支持的动…

Verilog基础:编译指令`timescale

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 timescale编译指令用于指定指令后模块的时间单位和时间精度。时间单位是时间值的度量单位&#xff0c;例如延迟值和仿真时间&#xff1b;而仿真精度决定了最小可分…

《SpringBoot项目实战》第六篇—接口防抖(防重复提交)的一些方式

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 本文参考项目源码地址&#xff1a;summo-springboot-i…

15.Servlet [一篇通]

文章目录 1.Servlet 是什么2.第一个 Servlet 程序2.1创建项目2.2引入依赖2.3创建目录2.4编写代码2.5打包程序2.6部署程序2.7验证程序 3.更方便的部署方式3.1安装 Smart Tomcat 插件3.2配置 Smart Tomcat 插件 4.访问出错怎么办?4.1出现 4044.2出现 4054.3出现 5004.4出现 &quo…

前端面试高频考点—事件循环Event loop

目录 事件循环 执行步骤 概念讲解 主线程 微任务(micro task) 宏任务(macro task) Event Loop经典例题 这段代码的执行结果是什么&#xff1f; 正确答案&#xff1a; 具体流程&#xff1a; 事件循环 主线程从"任务队列"中读取执行事件&#xff0c;这个过程…

WeiPHP 微信开发平台 SQL注入漏洞复现

0x01 产品简介 weiphp 是一个开源,高效,简洁的微信开发平台,基于 oneThink 内容管理框架实现。 0x02 漏洞概述 weiphp 微信开发平台 _send_by_group、 wp_where、 get_package_template等接口处存在 SQL 注入漏洞,攻击者利用此漏洞可获取数据库中的信息(例如,管理员后台…

【Docker】部署若依项目——保姆级教程亲测

目录 1.部署后端 步骤1&#xff1a;修改mysql地址 步骤2&#xff1a;修改redis地址 步骤3&#xff1a;修改后端端口 步骤4&#xff1a;将项目打包成Jar包 ​编辑 步骤5&#xff1a;编写Dockerfile 步骤6&#xff1a;制作镜像 启动容器 步骤7&#xff1a;访问 2.前端打…

国产接口测试工具APIpost

说实话&#xff0c;了解APIpost是因为&#xff0c;我的所有接口相关的文章下&#xff0c;都有该APIpost水军的评论&#xff0c;无非就是APIpost是中文版的postman&#xff0c;有多么多么好用&#xff0c;虽然咱也还不是什么啥网红&#xff0c;但是不知会一声就乱在评论区打广告…

论文阅读-Null-text Inversion for Editing Real Images using Guided Diffusion Models

一、论文信息 作者团队&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2211.09794.pdf 代码链接&#xff1a;https://github.com/google/prompt-to-prompt 二、Conditional Diffusion&#xff08;classifier-free guidance) Classifier-free guidance方法训练&…

Honeywell PM43 loadfile.lp RCE漏洞复现(CVE-2023-3710)

0x01 产品简介 Honeywell PM43 是美国霍尼韦尔&#xff08;Honeywell&#xff09;公司的一款打印机产品。 0x02 漏洞概述 Honeywell PM43 P10.19.050004之前版本存在输入验证错误漏洞&#xff0c;攻击者可通过该漏洞在服务器端任意执行代码&#xff0c;写入后门&#xff0c;获…

【数据结构】链表OJ题(顺序表)(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

minio配置监听(对象操作日志)

minio配置监听对象操作 本文档适用于minio2021.3.17版本 有时我们需要查看minio中对象操作的日志&#xff0c;比如像监听minio某一个桶中的删除事件&#xff0c;就需要配置监听。minio支持将监听的结果输出到es、pg、amq等等&#xff0c;下面介绍一下将minio对象操作监听结果输…

leetcode:1422. 分割字符串的最大得分(python3解法)

难度&#xff1a;简单 给你一个由若干 0 和 1 组成的字符串 s &#xff0c;请你计算并返回将该字符串分割成两个 非空 子字符串&#xff08;即 左 子字符串和 右 子字符串&#xff09;所能获得的最大得分。 「分割字符串的得分」为 左 子字符串中 0 的数量加上 右 子字符串中 1…

Stable Diffusion AI绘画系列【15】:花丛中的唯美人物写实照

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

数实融合!低代码推动工业数字化转型走“深”向“实”

当下&#xff0c;“数字化、智能化”已经不再是新鲜词。毕竟&#xff0c;在早几年前就已经有企业喊出大举进军数字化的口号&#xff0c;轰轰烈烈的数字化转型运动也持续了很长一段时间&#xff0c;有一些业内人士甚至判断“如今的企业数字化已经走过了成熟期&#xff0c;来到了…

Codeforces Round 899 (Div. 2)(C手玩? D换根dp+贪心)

A - Increasing Sequence 直接从1开始模拟就行 #include<bits/stdc.h> using namespace std; const int N 2e510,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; const long long inf1e17; using nodetuple<int,int,…

【Linux系统编程】开发工具yum和vim

目录 一&#xff0c;yum工具的使用 1&#xff0c;yum的介绍 2&#xff0c;yum的使用 二&#xff0c;vim工具的开发 1&#xff0c;vim的介绍 2&#xff0c;模式的使用 3&#xff0c;vim配置文件 4&#xff0c;sudo配置文件 一&#xff0c;yum工具的使用 1&#xff0c;y…

数据可视化工具选择:功能、易用性与安全性

作为一名数据可视化大屏设计师&#xff0c;我深知选择一款合适的数据可视化工具对于提高工作效率和呈现效果的重要性。下面&#xff0c;我将从真正对我们数据可视化大屏设计师有用的角度为大家介绍选择数据可视化工具的一些必要条件和要求。 1. 功能强大与灵活定制 首先&…

UVM中封装成agent

在验证平台中加入monitor时&#xff0c;看到driver和monitor之间的联系&#xff1a;两者之间的代码高度相似。其本质是因为二者 处理的是同一种协议&#xff0c;在同样一套既定的规则下做着不同的事情。由于二者的这种相似性&#xff0c;UVM中通常将二者封装在一起&#xff0c;…

Python编程技巧:多层for循环的高级应用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python的for循环结构是编程中最基础也是最常用的控制结构之一。通过for循环&#xff0c;可以轻松遍历数据集合和执行重复的操作。然而&#xff0c;当我们面对多层for循环时&#xff0c;性能和可读性可能会成为挑…