在楼主的基础上加了个qt5的界面
看了一下,requests没有设置user-agent,我这里是爬取不到东西的
楼主那里好用吗
爬虫的老问题了,ssl error,或者'远程主机强迫关闭了一个现有的连接。',之类的,懒得调试了
没用过iwara,需要设置代理或者设置cookie吗
import requests
from lxml import etree
import os
import re
from subprocess import call
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
#################################
# 函数定义
# 创建文件夹
def mkdir(path):
# 判断是否存在文件夹如果不存在则创建为文件夹
# 如果路径不存在会创建这个路径
folder = os.path.exists(path)
if not folder:
os.makedirs(path)
# 使用IDM下载资源
def idm_dld(idm_url, idm_path, idm_name):
IDMPath = r"C:\Users\zero\Desktop\IDM"
os.chdir(IDMPath)
IDM = "IDMan.exe"
call([IDM, '/d', idm_url, '/p', idm_path, '/f', idm_name, '/a'])
call([IDM, '/s'])
# 提取视频源
def get_source_url(url):
url_api = url.split('videos', 1)[0] + 'api/video' + url.split('videos', 1)[1]
response = requests.get(url_api)
js = response.json()
for item in js:
if item['resolution'] == 'Source':
source_url = 'https:' + item['uri']
return source_url
# 从页面提取视频网址
def get_urls(search_url):
if search_url == '':
return []
requests.get(search_url)
web_urls = etree.HTML(requests.get(search_url).text).xpath('//div[@class="field-item even"]/a/@href')
for i in range(len(web_urls)):
web_urls
= 'https://ecchi.iwara.tv' + web_urls
return web_urls
# 下载多个网页的视频
# 在expire_year-expire_month之前的视频不会下载
def videos_dld(web_urls, dld_path, expire_year, expire_month):
# 对每个网址
for i in range(len(web_urls)):
print(str(i + 1) + '/' + str(len(web_urls)) + '\t' + web_urls)
if web_urls.find('videos') >= 0:
source_url = get_source_url(web_urls)
if source_url is None:
continue
file_name = re.search('file=(.*?)&op', source_url).group(1)
author = etree.HTML(requests.get(web_urls).text).xpath('//a[@class="username"]/text()')[0]
print('\t' + 'Author: ' + author)
print('\t' + source_url)
file_name = file_name.replace('%2F', '-')
print('\t' + 'New name: ' + file_name)
file_path = dld_path + '\\' + author
mkdir(file_path)
local_name = file_path + '\\' + file_name
old_file_name = file_name.split('-')[3]
print('\t' + 'Old name: ' + old_file_name)
old_local_name = file_path + '\\' + old_file_name
# 判断日期
if ((int(file_name.split('-')[0]) == expire_year) & (int(file_name.split('-')[1]) >= expire_month) | (int(file_name.split('-')[0]) > expire_year)):
# 下载
if (not os.path.isfile(local_name)) & (not os.path.isfile(old_local_name)):
print('\tState: no such file, to be downloaded')
idm_dld(source_url, file_path, file_name)
elif os.path.isfile(old_local_name) & os.path.isfile(local_name):
print('\tState: old and new file exist')
os.remove(old_local_name)
elif os.path.isfile(old_local_name):
print('\tState: old file exist')
os.rename(old_local_name, local_name)
else:
print('\tState: new file exist')
else:
print('\tEarly date')
break
# 整合版
def iwara_dld(dld_path, search_url, web_urls, expire_year, expire_month):
search_urls = get_urls(search_url)
# print('Download videos from search page')
videos_dld(search_urls, dld_path, expire_year, expire_month)
# print('Download videos directly from urls')
videos_dld(web_urls, dld_path, 2000, 0)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(614, 531)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
self.textBrowser.setGeometry(QtCore.QRect(30, 321, 551, 191))
self.textBrowser.setObjectName("textBrowser")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 10, 71, 21))
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(120, 10, 311, 21))
self.lineEdit.setObjectName("lineEdit")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(460, 10, 111, 21))
self.pushButton.setObjectName("pushButton")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 50, 72, 15))
self.label_2.setObjectName("label_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(120, 50, 311, 21))
self.lineEdit_2.setObjectName("lineEdit_2")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(460, 50, 111, 21))
self.pushButton_2.setObjectName("pushButton_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(30, 120, 72, 15))
self.label_3.setObjectName("label_3")
self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_3.setGeometry(QtCore.QRect(120, 120, 261, 21))
self.lineEdit_3.setObjectName("lineEdit_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(30, 160, 72, 15))
self.label_4.setObjectName("label_4")
self.lineEdit_4 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_4.setGeometry(QtCore.QRect(120, 160, 81, 21))
self.lineEdit_4.setObjectName("lineEdit_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(30, 200, 72, 15))
self.label_5.setObjectName("label_5")
self.lineEdit_5 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_5.setGeometry(QtCore.QRect(120, 200, 81, 21))
self.lineEdit_5.setObjectName("lineEdit_5")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(240, 200, 111, 21))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(450, 200, 111, 21))
self.pushButton_4.setObjectName("pushButton_4")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 614, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "url"))
self.pushButton.setText(_translate("MainWindow", "直链下载"))
self.label_2.setText(_translate("MainWindow", "url"))
self.pushButton_2.setText(_translate("MainWindow", "下载全部视频"))
self.label_3.setText(_translate("MainWindow", "下载目录"))
self.label_4.setText(_translate("MainWindow", "年份"))
self.label_5.setText(_translate("MainWindow", "月份"))
self.pushButton_3.setText(_translate("MainWindow", "更改下载设置"))
self.pushButton_4.setText(_translate("MainWindow", "查看下载设置"))
class MyWindow(QMainWindow ,Ui_MainWindow):
# 设置
# local_path = "D:\\Another\\temp\\ANOTHER_RUBBISH\\VIDEOS\\Iwara"
local_path = "C:\\Another\\temp\\iwara"
# 搜索页面URL
url = ''
# 视频网页.
urls = []
# 下载该日期之后的视频
year = 2020
month = 3
print('------------------------------------')
print('Iwara Downloader V1.0')
print('------------------------------------')
print('Default Settings:')
print('Download Directory: %s' % (local_path))
print('Year: %s' % str(year))
print('Month: %s' % str(month))
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.cmd1)
self.pushButton_2.clicked.connect(self.cmd2)
self.pushButton_3.clicked.connect(self.cmd3)
self.pushButton_4.clicked.connect(self.cmd4)
def cmd1(self):
url = ''
urls = []
temp=self.lineEdit.text()
urls.append(temp)
iwara_dld(self.local_path, url, urls, self.year, self.month)
def cmd2(self):
url = ''
urls = []
url = self.lineEdit_2.text()
iwara_dld(self.local_path, url, urls, self.year, self.month)
def cmd3(self):
try:
self.local_path = self.lineEdit_3.text()
mkdir(self.local_path)
self.year = self.lineEdit_4.text()
self.month = self.lineEdit_5.text()
self.textBrowser.append('\n更改设置成功')
except:
self.local_path = "C:\\Another\\temp\\iwara"
self.year = 2020
self.month = 3
def cmd4(self):
print('\nView Download Settings :')
print('Download Directory: %s' % (self.local_path))
print('Year: %s' % str(self.year))
print('Month: %s' % str(self.month))
self.textBrowser.append('\nView Download Settings :')
self.textBrowser.append('Download Directory: %s' % (self.local_path))
self.textBrowser.append('Year: %s' % str(self.year))
self.textBrowser.append('Month: %s' % str(self.month))
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyWindow()
myWin.show()
sys.exit(app.exec_())