找回密码
  注册[Register]
查看: 865|回复: 8

爬取表情包软件带gui界面 附成品

[复制链接]
发表于 2020-12-6 17:28 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

[Python]
  1. # -*- coding: utf-8 -*-

  2. # Form implementation generated from reading ui file 'expressionWeb.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.1
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again.  Do not edit this file unless you know what you are doing.
  8. import sys
  9. from datetime import datetime
  10. from PyQt5 import QtCore, QtGui, QtWidgets
  11. from PyQt5.QtCore import QThread, pyqtSignal
  12. from PyQt5.QtGui import QIcon
  13. from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
  14. import os
  15. import requests
  16. from bs4 import BeautifulSoup
  17. import re




  18. class Ui_Form(object):
  19.         def setupUi(self, Form):
  20.                 Form.setObjectName("Form")
  21.                 Form.resize(371, 329)
  22.                 self.progressBar = QtWidgets.QProgressBar(Form)
  23.                 self.progressBar.setGeometry(QtCore.QRect(117, 91, 151, 23))
  24.                 self.progressBar.setProperty("value", 0)
  25.                 self.progressBar.setObjectName("progressBar")
  26.                 self.accordingToSituation = QtWidgets.QTextBrowser(Form)
  27.                 self.accordingToSituation.setGeometry(QtCore.QRect(0, 182, 371, 148))
  28.                 self.accordingToSituation.setObjectName("accordingToSituation")
  29.                 # self.accordingToSituation.setLineWrapMode(1)
  30.                 self.progressOf = QtWidgets.QLabel(Form)
  31.                 self.progressOf.setGeometry(QtCore.QRect(70, 91, 72, 23))
  32.                 self.progressOf.setObjectName("progressOf")
  33.                 self.layoutWidget = QtWidgets.QWidget(Form)
  34.                 self.layoutWidget.setGeometry(QtCore.QRect(33, 49, 311, 25))
  35.                 self.layoutWidget.setObjectName("layoutWidget")
  36.                 self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
  37.                 self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
  38.                 self.horizontalLayout.setObjectName("horizontalLayout")
  39.                 self.label = QtWidgets.QLabel(self.layoutWidget)
  40.                 self.label.setObjectName("label")
  41.                 self.horizontalLayout.addWidget(self.label)
  42.                 self.numberPages = QtWidgets.QLineEdit(self.layoutWidget)
  43.                 self.numberPages.setObjectName("numberPages")
  44.                 self.horizontalLayout.addWidget(self.numberPages)
  45.                 self.grab = QtWidgets.QPushButton(self.layoutWidget)
  46.                 self.grab.setObjectName("grab")
  47.                 self.horizontalLayout.addWidget(self.grab)
  48.                 self.pushButton = QtWidgets.QPushButton(Form)
  49.                 self.pushButton.setGeometry(QtCore.QRect(110, 140, 121, 23))
  50.                 self.pushButton.setObjectName("pushButton")
  51.                 # self.pushButton.clicked.connect(self.slot_btn_chooseDir)
  52.                 self.grab.clicked.connect(self.just)

  53.                 self.retranslateUi(Form)
  54.                 QtCore.QMetaObject.connectSlotsByName(Form)

  55.         def retranslateUi(self, Form):
  56.                 _translate = QtCore.QCoreApplication.translate
  57.                 Form.setWindowTitle(_translate("Form", "表情包软件"))
  58.                 self.progressOf.setText(_translate("Form", "进度"))
  59.                 self.label.setText(_translate("Form", "  输入页数:"))
  60.                 self.grab.setText(_translate("Form", "抓取"))
  61.                 self.pushButton.setText(_translate("Form", "功能待定"))

  62.         def settxt(self,wd):
  63.                 self.accordingToSituation.setText(wd)

  64.         def GrabExpression(self, data):
  65.                 self.progressBar.setValue(data)
  66.                 # self.updatas()
  67.                 # self.accordingToSituation.setText(data)
  68.                 if data == 100:
  69.                         # QMessageBox.information(w, '提示', '保存成功')
  70.                         # self.progressBar.setValue(0)
  71.                         # self.accordingToSituation.setText('保存成功')
  72.                         # self.grab.setText('保存成功')
  73.                         QMessageBox.information(w,'提示','保存成功')
  74.                         self.numberPages.setText('')
  75.                         self.progressBar.setValue(0)
  76.                         self.grab.setText('抓取')
  77.                 else:
  78.                         pass


  79.         def just(self):
  80.                 # global bs
  81.                 # bs=self.slot_btn_chooseDir()
  82.                 self.update_data_thread = UpdateData()
  83.                 self.update_data_thread.update_date.connect(self.GrabExpression)
  84.                 self.update_data_thread.upda_name.connect(self.stext)

  85.                 self.update_data_thread.start()


  86.         def toObtainInputBox(self):
  87.                 urls=self.numberPages.text()
  88.                 return urls

  89.         def erross(self):
  90.                 self.grab.setText('失败')
  91.         # def updatas(self):
  92.         #         self.update_data_thread = UpdateData()
  93.         #         self.update_data_thread.upda_name.connect(self.GrabExpression)
  94.         #         self.update_data_thread.start()
  95.         def stext(self,datas):
  96.                 self.accordingToSituation.insertPlainText(datas)



  97. class UpdateData(QThread,Ui_Form):
  98.         """更新数据类"""
  99.         update_date = pyqtSignal(int)
  100.         upda_name=pyqtSignal(str) # pyqt5 支持python3的str,没有Qstring

  101.         def run(self):
  102.                 t=1
  103.                 a = 0
  104.                 page=int(UI.toObtainInputBox())
  105.                 curr_time = datetime.datetime.now()#获取系统时间

  106.                 fw=100/page
  107.                 path = datetime.datetime.strftime(curr_time, '%Y%m%d%H%M')
  108.                         # print(path)
  109.                 if os.path.exists(path):#检查是否存在这个文件夹
  110.                         # print("属于这个时间点的文件夹已经创建好")
  111.                         pass
  112.                 else:
  113.                         os.mkdir(path)#不存在则创建
  114.                         print("创建成功!!!!正在保存图片")
  115.                 dirname = os.getcwd() + '\\' + path + '\\'
  116.                 print(dirname)
  117.                 while t<=page:
  118.                         # ase=UI.slot_btn_chooseDir()
  119.                         try:# test=self.xuanquwenjian()
  120.                                 url=f'https://fabiaoqing.com/biaoqing/lists/page/{t}.html'#获取连接
  121.                                 # print(curr_time)#打印时间 测试用
  122.                                 headers = {
  123.                                         'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'}# 'cookie': 'tvfe_boss_uuid=4427f26b6d83d5d7; pgv_pvid=8192465356; pgv_pvi=2750494720; RK=cfw14pvSFY; ptcz=026939cd8bdd917551be81f3d0d2563bdb9e2d0805f4c83de8df0ea6af457e49; eas_sid=i1e690x1l8v2I68559J4e8K995; LW_sid=W1C6S0u1y8a2A6E864o8L480Z0; LW_uid=51H6V041L8i2n6Q8M4S8e4k0D0; uin_cookie=o0878530130; ied_qq=o0878530130; o_cookie=878530130; pac_uid=1_878530130; luin=o0878530130; lskey=000100000f95a236a0b3f6a309a1f6e4809612024104f9a476a9b0803995ce53ec225971d5d95f3164c7df7a; rewardsn=; wxtokenkey=777'}

  124.                                  
  125.                                 req = requests.get(url=url, headers=headers).content.decode()
  126.                         except Exception as e:
  127.                                 # QMessageBox.information(w,'提示','报错!!!')
  128.                                 UI.erross()
  129.                                 return

  130.                         soup = BeautifulSoup(req, 'lxml')#用BeautifulSoup解析网页

  131.                         res = soup.select('img[class="ui image lazy"]')
  132.                         # cd=len(res)
  133.                         # fw=100/cd#获取该网页中所有的图片标签

  134.                         
  135.                         for i in res:#遍历所有的图片标签
  136.                                 if i.get("data-original") == None:#如果这个标签内的data-original等于空的时候直接跳过
  137.                                         pass
  138.                                 else:
  139.                                         try:#尝试去保存图片 如果保存图片错误则抛出异常
  140.                                                 # UI.stext(ase)
  141.                                                 with open(dirname + f'{i.get("alt")}'+os.path.splitext(i.get("data-original"))[-1], 'wb') as f:#拼接路径+a.jpg a是等于数字 每添加一个 a自增一 相当于是给图片命名 并且以二进制的形式写入
  142.                                                         f.write(requests.get(url=i.get("data-original"), headers=headers).content)#向这个图片发送请求 并将图片的二进制写入
  143.                                                         f.close()
  144.                                                         #关闭写入
  145.                                                         self.upda_name.emit(f'已保存第{a}张图片\n')  # 发射信号


  146.                                                         a = a + 1#a自增一
  147.                                         except Exception as e:#抛出异常 增加程序强壮性
  148.                                                 print("出现异常了")
  149.                         # self.upda_name.emit(f'=============================================================\n')  # 发射信号

  150.                         print("保存成功")
  151.                         t=t+1  # 发射信号
  152.                         self.update_date.emit((fw*t)-1)

  153.                 self.update_date.emit(100)

  154. if __name__ == "__main__":
  155.         app = QApplication(sys.argv)
  156.         w = QMainWindow()
  157.         UI = Ui_Form()
  158.         UI.setupUi(w)
  159.         w.setWindowIcon(QIcon("ts.ico"))
  160.         w.show()
  161.         app.exec_()
复制代码
完成品:

https://wwa.lanzoux.com/ip4Fjj3sa9e

154537m2gsgwqfs7wxoxwo.png


如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-12-6 17:28 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-6 19:04 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-6 20:11 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-6 20:56 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-6 23:06 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-7 14:23 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-7 17:45 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-12-7 18:31 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-6-8 19:32 , Processed in 0.036528 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表