import queue
import time
from urllib.parse import quote
import requests
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow, QApplication, QLabel, QWidget, QVBoxLayout, QMessageBox
from lxml import etree
from ui.movies import Ui_MainWindow
class ImgeThread(QThread):
downSignal = pyqtSignal(dict)
def __init__(self, parent=None):
super(ImgeThread, self).__init__(parent)
self.qus = queue.Queue()
self.timeTag = time.time()
def clear(self):
self.qus.queue.clear()
self.timeTag = time.time()
def checkTagOk(self, timeTag):
return self.timeTag == timeTag
def addParm(self, imglb, imgUrl):
data = {"imglb": imglb, "imgUrl": imgUrl}
data['timeTag'] = self.timeTag
self.qus.put(data)
def run(self):
while True:
data = self.qus.get()
try:
data["imgData"] = None
rs = requests.get(data['imgUrl'])
if rs.status_code == 200:
data["imgData"] = rs.content
self.downSignal.emit(data)
except Exception as e:
print(str(e))
class DownThread(QThread):
downSignal = pyqtSignal(dict)
def __init__(self, parent=None):
super(DownThread, self).__init__(parent)
self.qus = queue.Queue()
self.timeTag = time.time()
def clear(self):
self.qus.queue.clear()
self.timeTag = time.time()
def checkTagOk(self, timeTag):
return self.timeTag == timeTag
def addParm(self, mglb, imglb, url):
data = {"mglb": mglb, "imglb": imglb, "url": url}
data['timeTag'] = self.timeTag
self.qus.put(data)
def getMagnet(self, url):
api = 'https://m.ygdy8.com/'
res = requests.get(api + url)
res.encoding = 'GBK'
doc = etree.HTML(res.text)
a = doc.xpath('//*[@id="Zoom"]//a')[0]
img = doc.xpath('//*[@id="Zoom"]//img')[0]
return {'magnet': a.get('href'), 'img': img.get('src')}
def run(self):
while True:
data = self.qus.get()
try:
dn = self.getMagnet(data['url'])
data["magnet"] = dn['magnet']
data["imgUrl"] = dn['img']
self.downSignal.emit(data)
except Exception as e:
print(str(e))
class Main(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.edtKey.setText('成龙')
self.btnSearch.clicked.connect(self.btnSearchClick)
self.tbList.cellDoubleClicked.connect(self.tbListDbClick)
self.thRun = DownThread()
self.imRun = ImgeThread()
self.thRun.downSignal.connect(self.thRunSignal)
self.imRun.downSignal.connect(self.thImSignal)
self.thRun.start()
self.imRun.start()
def tbListDbClick(self, row, col):
wdg = self.tbList.cellWidget(row, col)
if not wdg:
return
lbs = wdg.findChildren(QLabel)
for lb in lbs:
print(lb.text())
if not lb.isVisible() and lb.text():
clipboard = QApplication.clipboard()
clipboard.setText(lb.text())
QMessageBox.information(self, '提示信息', '下载地址已复制到剪切板')
def thImSignal(self, data):
if not self.imRun.checkTagOk(data['timeTag']):
return
if data['imgData']:
pixmap = QPixmap()
pixmap.loadFromData(data['imgData'])
data['imglb'].setPixmap(pixmap)
data['imglb'].setVisible(True)
self.tbList.resizeRowsToContents()
self.tbList.resizeColumnsToContents()
def thRunSignal(self, data):
if not self.thRun.checkTagOk(data['timeTag']):
return
data['mglb'].setText(data['magnet'])
if data['imgUrl']:
self.imRun.addParm(data['imglb'], data['imgUrl'])
def btnSearchClick(self):
# self.add({"name": "test", "url": "xxxxx"})
# return
key = self.edtKey.text()
if not key:
return
self.thRun.clear()
self.imRun.clear()
self.tbList.setRowCount(0)
mvs = self.getMovies(key)
print(mvs)
for i in range(len(mvs)):
self.add(mvs[i], i % 3)
QApplication.processEvents()
def getMovies(self, key):
url = 'http://s.ygdy8.com/plus/s01.php?typeid=1&pagesize=100&keyword='
# key = '%D6%DC%D0%C7%B3%DB'
uri = url + quote(key, encoding='gbk')
res = requests.get(uri)
res.encoding = 'GBK'
doc = etree.HTML(res.text)
ass = doc.xpath('//*[@id="header"]/div/div[3]/div[3]/div[2]/div[2]/div[2]/ul//a')
rs = [{"name": a.xpath('string()'), "url": a.get('href')} for a in ass]
return rs
def getMagnet(self, url):
api = 'https://m.ygdy8.com/'
res = requests.get(api + url)
res.encoding = 'GBK'
doc = etree.HTML(res.text)
a = doc.xpath('//*[@id="Zoom"]//a')[0]
img = doc.xpath('//*[@id="Zoom"]//img')[0]
return {'magnet': a.get('href'), 'img': img.get('src')}
def add(self, item, col):
row = self.tbList.rowCount()
if col == 0:
self.tbList.setRowCount(row + 1)
else:
row -= 1
lb = QLabel()
lb.setMaximumSize(200, 200)
lb.setMinimumSize(200, 200)
lb.setVisible(False)
lb.setScaledContents(True) # 自动调整图像尺寸以适应单元格
wg = QWidget()
wg.setMaximumSize(200, 300)
wg.setMinimumSize(200, 300)
ly = QVBoxLayout(wg)
ly.addWidget(lb)
nm = QLabel(item['name'])
nm.setWordWrap(True)
ly.addWidget(nm)
mg = QLabel()
mg.setVisible(False)
ly.addWidget(mg)
wg.setLayout(ly)
self.tbList.setCellWidget(row, col, wg)
self.tbList.resizeRowsToContents()
self.tbList.resizeColumnsToContents()
try:
self.loadImg(item['url'], lb, mg)
except Exception as e:
print(str(e))
def loadImg(self, dnurl, imglb, mglb):
self.thRun.addParm(mglb, imglb, dnurl)
return
dn = self.getMagnet(dnurl)
mglb.setText(dn['magnet'])
rs = requests.get(dn['img'])
if rs.status_code != 200:
return
pixmap = QPixmap()
pixmap.loadFromData(rs.content)
imglb.setPixmap(pixmap)
imglb.setVisible(True)
self.tbList.resizeRowsToContents()
self.tbList.resizeColumnsToContents()
app = QApplication([])
main = Main()
main.show()
app.exec_()
#pyinstaller -F -w ./video/mainvs.py
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
py电影爬虫源码.rar (2个子文件)
爬虫
mainvs.py 7KB
ui
movies.py 3KB
共 2 条
- 1
资源评论
lgw765
- 粉丝: 15
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功