因为阿里云盘资源页面取网页源码获取不到资源信息,全都是js,所以才尝试用py写一个小工具用来取资源名和下载链接试试,代码只写了主要的思路,然后加了一个简单的UI界面(用到QtPy6),免费分享出来,希望对py小白有一定的学习价值。(代码不多,就不加注释了)
#阿里云盘资源页采集测试片段 By:FNingNet
from tkinter import messagebox
import pyperclip
import requests
import json
import sys
from PyQt6 import QtCore, QtGui, QtWidgets
#"XXXX"请替换成自己的DOMAIN_ID即可,否则只能在header中自己抓SHARE_TOKEN,然后手动填入
get_share_token_url = "https://XXXX.api.aliyunpds.com/v2/share_link/get_share_token" #"XXXX"请替换成自己的DOMAIN_ID即可,否则只能在header中自己抓SHARE_TOKEN,然后手动填入
#爬取
def get_aliyun(share_id,parent_file_id,x_share_token):
url = "https://api.aliyundrive.com/adrive/v2/file/list_by_share"
payload = "{\"share_id\":\""+share_id+"\",\"parent_file_id\":\""+parent_file_id+"\",\"limit\":200,\"image_thumbnail_process\":\"image/resize,w_256/format,jpeg\",\"image_url_process\":\"image/resize,w_1920/format,jpeg/interlace,1\",\"video_thumbnail_process\":\"video/snapshot,t_1000,f_jpg,ar_auto,w_256\",\"order_by\":\"name\",\"order_direction\":\"DESC\"}"
headers = {
'Content-Type': 'text/plain',
'x-share-token': x_share_token
}
response = requests.request("POST", url, headers=headers, data=payload)
result = response.json()
items = result['items']
info = ""
for i in items:
ali_name = i['name']
ali_file_id = i['file_id']
ali_share_id = i['share_id']
ali_type = i['type']
if ali_type == 'folder':
ali_pre = "【文件夹】"
info = info + f"资源名称:{ali_pre}{ali_name} \n资源地址:https://www.aliyundrive.com/s/{ali_share_id}/folder/{ali_file_id} \n----------\n"
else:
ali_pre = "【文件】"
info = info + f"资源名称:{ali_pre}{ali_name} \n----------\n"
return info
#UI界面
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(741, 660)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("C:/Users/JIAN/Desktop/fengning_logo.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
self.centralwidget.setEnabled(True)
self.centralwidget.setMinimumSize(QtCore.QSize(0, 618))
self.centralwidget.setObjectName("centralwidget")
self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(10, 60, 721, 211))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.groupBox.setFont(font)
self.groupBox.setObjectName("groupBox")
self.label_x_share_token = QtWidgets.QLabel(parent=self.groupBox)
self.label_x_share_token.setGeometry(QtCore.QRect(11, 166, 121, 21))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_x_share_token.setFont(font)
self.label_x_share_token.setObjectName("label_x_share_token")
self.label_share_id = QtWidgets.QLabel(parent=self.groupBox)
self.label_share_id.setGeometry(QtCore.QRect(11, 86, 121, 21))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_share_id.setFont(font)
self.label_share_id.setObjectName("label_share_id")
self.label_parent_file_id = QtWidgets.QLabel(parent=self.groupBox)
self.label_parent_file_id.setGeometry(QtCore.QRect(11, 126, 121, 21))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_parent_file_id.setFont(font)
self.label_parent_file_id.setObjectName("label_parent_file_id")
self.lineEdit_share_id = QtWidgets.QLineEdit(parent=self.groupBox)
self.lineEdit_share_id.setGeometry(QtCore.QRect(130, 80, 511, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
self.lineEdit_share_id.setFont(font)
self.lineEdit_share_id.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.lineEdit_share_id.setStatusTip("")
self.lineEdit_share_id.setWhatsThis("")
self.lineEdit_share_id.setAccessibleName("")
self.lineEdit_share_id.setAccessibleDescription("")
self.lineEdit_share_id.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhNone)
self.lineEdit_share_id.setInputMask("")
self.lineEdit_share_id.setText("")
self.lineEdit_share_id.setObjectName("lineEdit_share_id")
self.lineEdit_parent_file_id = QtWidgets.QLineEdit(parent=self.groupBox)
self.lineEdit_parent_file_id.setGeometry(QtCore.QRect(130, 120, 511, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
self.lineEdit_parent_file_id.setFont(font)
self.lineEdit_parent_file_id.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.lineEdit_parent_file_id.setText("")
self.lineEdit_parent_file_id.setObjectName("lineEdit_parent_file_id")
self.lineEdit_x_share_token = QtWidgets.QLineEdit(parent=self.groupBox)
self.lineEdit_x_share_token.setGeometry(QtCore.QRect(130, 160, 511, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
self.lineEdit_x_share_token.setFont(font)
self.lineEdit_x_share_token.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.lineEdit_x_share_token.setToolTipDuration(-1)
self.lineEdit_x_share_token.setText("")
self.lineEdit_x_share_token.setObjectName("lineEdit_x_share_token")
self.pushButton_Share_id = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_Share_id.setGeometry(QtCore.QRect(650, 80, 61, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pushButton_Share_id.setFont(font)
self.pushButton_Share_id.setObjectName("pushButton_Share_id")
self.pushButton_Parent_file_id = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_Parent_file_id.setGeometry(QtCore.QRect(650, 120, 61, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pushButton_Parent_file_id.setFont(font)
self.pushButton_Parent_file_id.setObjectName("pushButton_Parent_file_id")
self.pushButton_X_share_token = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_X_share_token.setGeometry(QtCore.QRect(650, 160, 61, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pushButton_X_share_token.setFont(font)
self.pushButton_X_share_token.setObjectName("pushButton_X_share_token")
self.label_Share_URL = QtWidgets.QLabel(parent=self.groupBox)
self.label_Share_URL.setGeometry(QtCore.QRect(11, 46, 121, 21))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_Share_URL.setFont(font)
self.label_Share_URL.setObjectName("label_Share_URL")
self.lineEdit_Share_URL = QtWidgets.QLineEdit(parent=self.groupBox)
self.lineEdit_Share_URL.setGeometry(QtCore.QRect(130, 40, 511, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
self.lineEdit_Share_URL.setFont(font)
self.lineEdit_Share_URL.setFocusPolicy(QtCore.Qt.FocusPolicy.ClickFocus)
self.lineEdit_Share_URL.setStatusTip("")
self.lineEdit_Share_URL.setWhatsThis("")
self.lineEdit_Share_URL.setAccessibleName("")
self.lineEdit_Share_URL.setAccessibleDescription("")
self.lineEdit_Share_URL.setLayoutDirection(QtCore.Qt.LayoutDirection.LeftToRight)
self.lineEdit_Share_URL.setInputMethodHints(QtCore.Qt.InputMethodHint.ImhNone)
self.lineEdit_Share_URL.setInputMask("")
self.lineEdit_Share_URL.setText("")
self.lineEdit_Share_URL.setObjectName("lineEdit_Share_URL")
self.pushButton_Share_URL = QtWidgets.QPushButton(parent=self.groupBox)
self.pushButton_Share_URL.setGeometry(QtCore.QRect(650, 40, 61, 31))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(10)
font.setBold(False)
font.setWeight(50)
self.pushButton_Share_URL.setFont(font)
self.pushButton_Share_URL.setObjectName("pushButton_Share_URL")
self.label_x_share_token.raise_()
self.label_share_id.raise_()
self.label_parent_file_id.raise_()
self.lineEdit_share_id.raise_()
self.lineEdit_parent_file_id.raise_()
self.lineEdit_x_share_token.raise_()
self.pushButton_Share_id.raise_()
self.pushButton_Parent_file_id.raise_()
self.pushButton_X_share_token.raise_()
self.label_Share_URL.raise_()
self.pushButton_Share_URL.raise_()
self.lineEdit_Share_URL.raise_()
self.groupBox_2 = QtWidgets.QGroupBox(parent=self.centralwidget)
self.groupBox_2.setGeometry(QtCore.QRect(10, 270, 721, 331))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(15)
font.setBold(True)
font.setWeight(75)
self.groupBox_2.setFont(font)
self.groupBox_2.setObjectName("groupBox_2")
self.textEdit_result = QtWidgets.QTextEdit(parent=self.groupBox_2)
self.textEdit_result.setGeometry(QtCore.QRect(10, 30, 701, 291))
font = QtGui.QFont()
font.setPointSize(10)
self.textEdit_result.setFont(font)
self.textEdit_result.setObjectName("textEdit_result")
self.pushButton_tijiao = QtWidgets.QPushButton(parent=self.centralwidget)
self.pushButton_tijiao.setGeometry(QtCore.QRect(10, 610, 151, 41))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.pushButton_tijiao.setFont(font)
self.pushButton_tijiao.setObjectName("pushButton_tijiao")
self.pushButton_qingkong = QtWidgets.QPushButton(parent=self.centralwidget)
self.pushButton_qingkong.setGeometry(QtCore.QRect(280, 610, 151, 41))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.pushButton_qingkong.setFont(font)
self.pushButton_qingkong.setObjectName("pushButton_qingkong")
self.pushButton_fuzhi = QtWidgets.QPushButton(parent=self.centralwidget)
self.pushButton_fuzhi.setGeometry(QtCore.QRect(570, 610, 151, 41))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.pushButton_fuzhi.setFont(font)
self.pushButton_fuzhi.setObjectName("pushButton_fuzhi")
self.label = QtWidgets.QLabel(parent=self.centralwidget)
self.label.setGeometry(QtCore.QRect(10, 0, 721, 51))
font = QtGui.QFont()
font.setFamily("微软雅黑")
font.setPointSize(23)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "阿里云采集助手-By FNingNet"))
self.groupBox.setTitle(_translate("MainWindow", "变量设置:"))
self.label_x_share_token.setText(_translate("MainWindow", "X_share_token:"))
self.label_share_id.setText(_translate("MainWindow", "Share_id:"))
self.label_parent_file_id.setText(_translate("MainWindow", "Parent_file_id:"))
self.lineEdit_share_id.setPlaceholderText(_translate("MainWindow", "请输入share_id"))
self.lineEdit_parent_file_id.setPlaceholderText(_translate("MainWindow", "请输入parent_file_id"))
self.lineEdit_x_share_token.setPlaceholderText(_translate("MainWindow", "请输入x_share_token"))
self.pushButton_Share_id.setText(_translate("MainWindow", "Ctrl+V"))
self.pushButton_Parent_file_id.setText(_translate("MainWindow", "Ctrl+V"))
self.pushButton_X_share_token.setText(_translate("MainWindow", "Ctrl+V"))
self.label_Share_URL.setText(_translate("MainWindow", "Share_URL:"))
self.lineEdit_Share_URL.setPlaceholderText(_translate("MainWindow", "请输入阿里云资源主目录url"))
self.pushButton_Share_URL.setText(_translate("MainWindow", "解析"))
self.groupBox_2.setTitle(_translate("MainWindow", "采集结果:"))
self.textEdit_result.setPlaceholderText(_translate("MainWindow", "此处显示采集结果"))
self.pushButton_tijiao.setText(_translate("MainWindow", "提 交"))
self.pushButton_qingkong.setText(_translate("MainWindow", "清 空"))
self.pushButton_fuzhi.setText(_translate("MainWindow", "复 制"))
self.label.setText(_translate("MainWindow", "阿里云资料采集助手"))
#按钮槽参数
self.pushButton_tijiao.clicked.connect(self.pushButton_tijiao_clicked)
self.pushButton_qingkong.clicked.connect(self.pushButton_qingkong_clicked)
self.pushButton_fuzhi.clicked.connect(self.pushButton_fuzhi_clicked)
self.pushButton_Share_id.clicked.connect(self.pushButton_Share_id_clicked)
self.pushButton_Parent_file_id.clicked.connect(self.pushButton_Parent_file_id_clicked)
self.pushButton_X_share_token.clicked.connect(self.pushButton_X_share_token_clicked)
self.pushButton_Share_URL.clicked.connect(self.pushButton_Share_URL_clicked)
def pushButton_tijiao_clicked(self):
share_id = self.lineEdit_share_id.text()
parent_file_id = self.lineEdit_parent_file_id.text()
x_share_token = self.lineEdit_x_share_token.text()
result = get_aliyun(share_id,parent_file_id,x_share_token)
self.textEdit_result.setText(result)
def pushButton_qingkong_clicked(self):
self.textEdit_result.setText("")
def pushButton_fuzhi_clicked(self):
self.textEdit_result.selectAll()
self.textEdit_result.copy()
def pushButton_Share_id_clicked(self):
self.lineEdit_share_id.setText(pyperclip.paste())
def pushButton_Parent_file_id_clicked(self):
self.lineEdit_parent_file_id.setText(pyperclip.paste())
def pushButton_X_share_token_clicked(self):
self.lineEdit_x_share_token.setText(pyperclip.paste())
def pushButton_Share_URL_clicked(self):
Share_URL = self.lineEdit_Share_URL.text()
Share_URL = Share_URL.strip()
Share_id_start = Share_URL.find("/s/") + 3
Share_id_end = Share_URL.find("/folder/")
share_id = Share_URL[Share_id_start:Share_id_end]
Parent_file_id_start = Share_URL.find("/folder/") + 8
Parent_file_id_end = len(Share_URL)
Parent_file_id = Share_URL[Parent_file_id_start:Parent_file_id_end]
self.lineEdit_share_id.setText(share_id)
self.lineEdit_parent_file_id.setText(Parent_file_id)
get_share_token_response = get_share_token(share_id)
self.lineEdit_x_share_token.setText(get_share_token_response)
def get_share_token(share_id):
get_share_token_payload = json.dumps({"share_id": share_id})
get_share_token_headers = {'Content-Type': 'application/json'}
get_share_token_response = requests.post(url=get_share_token_url, headers=get_share_token_headers, data=get_share_token_payload)
data = json.loads(get_share_token_response.text)
share_token = data.get('share_token')
return share_token
#显示可视化界面
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec())
需要打包成exe可执行文件的话,我是安装的pyinstaller,还有py最新版本可能不能安装pyinstaller,会因为最新版本的py取消了imp支持库的问题而报错,建议安装之前的版本,我是用的py3.7。