当前位置: 首页 > news >正文

百度网站认证v1安徽公路建设行业协会网站是哪个

百度网站认证v1,安徽公路建设行业协会网站是哪个,信息化建设 网站,网站怎么做分享链接地址音乐下载 设计思路#xff1a; 设计界面编写爬虫代码绑定爬虫打包exe文件 这个是最终的设计成果#xff0c;所有的下载歌曲都在“下载mp3”文件夹里面 完整代码 逻辑代码 import os.path import reimport requests from PyQt5.QtWidgets import QApplication,QWidget,QM…音乐下载 设计思路 设计界面编写爬虫代码绑定爬虫打包exe文件 这个是最终的设计成果所有的下载歌曲都在“下载mp3”文件夹里面 完整代码 逻辑代码 import os.path import reimport requests from PyQt5.QtWidgets import QApplication,QWidget,QMessageBox import sysfrom PyQt5 import QtCore, QtGui, QtWidgets from get_music import get_urlclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName(Form)Form.resize(800, 500)self.verticalLayout QtWidgets.QVBoxLayout(Form)self.verticalLayout.setObjectName(verticalLayout)self.horizontalLayout QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName(horizontalLayout)self.label QtWidgets.QLabel(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.label.setFont(font)self.label.setObjectName(label)self.horizontalLayout.addWidget(self.label)self.lineEdit QtWidgets.QLineEdit(Form)self.lineEdit.setObjectName(lineEdit)self.horizontalLayout.addWidget(self.lineEdit)self.verticalLayout.addLayout(self.horizontalLayout)self.listWidget QtWidgets.QListWidget(Form)self.listWidget.setObjectName(listWidget)self.verticalLayout.addWidget(self.listWidget)self.listWidget.itemDoubleClicked.connect(Form.downloads_music)self.horizontalLayout_2 QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName(horizontalLayout_2)spacerItem QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem)self.pushButton QtWidgets.QPushButton(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton.setFont(font)self.pushButton.setObjectName(pushButton)self.horizontalLayout_2.addWidget(self.pushButton)spacerItem1 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem1)self.pushButton_2 QtWidgets.QPushButton(Form)self.pushButton_2.setObjectName(pushButton_2)self.horizontalLayout_2.addWidget(self.pushButton_2)spacerItem2 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem2)self.pushButton_3 QtWidgets.QPushButton(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton_3.setFont(font)self.pushButton_3.setObjectName(pushButton_3)self.horizontalLayout_2.addWidget(self.pushButton_3)spacerItem3 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem3)self.verticalLayout.addLayout(self.horizontalLayout_2)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate QtCore.QCoreApplication.translateForm.setWindowTitle(_translate(Form, 音乐下载器))self.label.setText(_translate(Form, 音乐名称))self.pushButton.setText(_translate(Form, 搜索))self.pushButton.clicked.connect(Form.btn_search)self.pushButton_2.setText(_translate(Form, 更多))self.pushButton_2.clicked.connect(Form.btn_more)self.pushButton_3.setText(_translate(Form, 清空))self.pushButton_3.clicked.connect(Form.btn_clear)class MyWindow(QWidget):def __init__(self):super().__init__()self.ui Ui_Form()self.ui.setupUi(self)self.page11def btn_search(self):# print(点击搜索)self.page1 1pr_input self.ui.lineEdit.text()linlks get_url(pr_input,1)for linlk in linlks:self.ui.listWidget.addItem(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]}下载链接{linlk[3]})# print(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]})def btn_more(self):pr_input self.ui.lineEdit.text()self.page1 1linlks get_url(pr_input, self.page1)for linlk in linlks:self.ui.listWidget.addItem(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]}下载链接{linlk[3]})def btn_clear(self):self.ui.lineEdit.clear()self.ui.listWidget.clear()self.page1 1def downloads_music(self,data): # 这里第二个参数就把双击对象的文本内容传过来了# print(data.text())data data.text()author re.findall(fr歌名(.*?),data)[0]song re.findall(fr歌手(.*?),data)[0]id re.findall(frid(.*?),data)[0]download_urls re.findall(下载链接(.*),data)[0]# print(author)# print(song)# print(id)# print(download_urls)# QMessageBox.information(self, 下载提示, f是否下载{song}-{author}?, QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes) # 这里是下载前的提示我觉得没用就隐藏了code requests.get(download_urls)url_text code.textif ID3in url_text: # 因为mp3文件的开头都是ID3music requests.get(download_urls).contentif not os.path.exists(下载mp3):os.mkdir(下载mp3)# print(f下载mp3/{song}-{author}-{id}.mp3)with open(fr下载mp3/{song}-{author}-{id}.mp3, wb) as f:f.write(music)QMessageBox.warning(self, 下载提示, 下载成功)else:QMessageBox.warning(self,下载提示,f下载失败下载地址是{download_urls})if __name__ __main__:app QApplication(sys.argv)window MyWindow()window.show()sys.exit(app.exec_())爬虫代码 import pprint import re import requestsdef get_url(input,pages1):url https://music.txqq.pro/data {input: input,filter: name,type: netease,page: pages}header {x-requested-with:XMLHttpRequest}rt requests.post(urlurl,headersheader,datadata)rt.encoding rt.apparent_encodinglinks rt.json()# print(links)re_code links[code]print(re_code)mp3_links links[data]track_links []for link0 in mp3_links:downloed_url link0[url]title link0[title]author link0[author]id re.findall(id(.*?).mp3,downloed_url)[0]# print(title,author,id,downloed_url)track_links.append([title,author,id,downloed_url])return track_links界面py # -*- coding: utf-8 -*-# Form implementation generated from reading ui file 音乐下载器.ui # # Created by: PyQt5 UI code generator 5.15.11 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName(Form)Form.resize(400, 300)self.verticalLayout QtWidgets.QVBoxLayout(Form)self.verticalLayout.setObjectName(verticalLayout)self.horizontalLayout QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName(horizontalLayout)self.label QtWidgets.QLabel(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.label.setFont(font)self.label.setObjectName(label)self.horizontalLayout.addWidget(self.label)self.lineEdit QtWidgets.QLineEdit(Form)self.lineEdit.setObjectName(lineEdit)self.horizontalLayout.addWidget(self.lineEdit)self.verticalLayout.addLayout(self.horizontalLayout)self.listView QtWidgets.QListView(Form)self.listView.setObjectName(listView)self.verticalLayout.addWidget(self.listView)self.horizontalLayout_2 QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName(horizontalLayout_2)spacerItem QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem)self.pushButton QtWidgets.QPushButton(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton.setFont(font)self.pushButton.setObjectName(pushButton)self.horizontalLayout_2.addWidget(self.pushButton)spacerItem1 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem1)self.pushButton_2 QtWidgets.QPushButton(Form)self.pushButton_2.setObjectName(pushButton_2)self.horizontalLayout_2.addWidget(self.pushButton_2)spacerItem2 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem2)self.pushButton_3 QtWidgets.QPushButton(Form)font QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton_3.setFont(font)self.pushButton_3.setObjectName(pushButton_3)self.horizontalLayout_2.addWidget(self.pushButton_3)spacerItem3 QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem3)self.verticalLayout.addLayout(self.horizontalLayout_2)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate QtCore.QCoreApplication.translateForm.setWindowTitle(_translate(Form, 音乐下载器))self.label.setText(_translate(Form, 音乐名称))self.pushButton.setText(_translate(Form, 搜索))self.pushButton_2.setText(_translate(Form, 更多))self.pushButton_3.setText(_translate(Form, 清空))设计音乐下载器界面 首先要整一个标签提示用户要输入的信息 然后再整一个输入框让用户输入信息我们获取用户输入的信息 然后就是一个list view这个文本框显示我们根据用户输入的信息得到的内容 接着就是三个按钮搜索下一页清空 这是比较基本的需求具体的细节可以自己脑补 爬虫代码 设计思路 设计函数给一个歌名返回一个含歌曲详细信息的列表找网站 首先是找个音乐网站这个网站不要太牛逼不然光反爬就够你喝一壶了 最好是找个小网站也不要太卡功能不用太复杂支持搜索音乐下载音乐就行 像图片这种格局的网站就好了 这里使用F12查看咱们下载的音乐在哪里一般都是在数据包里面也就是异步获取需要使用post请求 这里的url和data不要弄错最重要的是请求头headers 因为服务器会从请求头来判断给你返回什么内容如果没有请求头就返回源代码而音乐的下载链接等详细信息都在数据包里面我们就得不到想要的结果 所以先去原网站打开开发者工具栏找下载链接先找源代码一般源代码都没有 然后刷新网页查看数据包你会找到一个只有data的数据包里面就是一系列的音乐下载链接 可能会遇到的问题 你一点击F12网页自动关闭 解决方法换一个网站 网站上能找到数据包但是pycharm中无论如何都得不到数据包只有源代码 解决方法把网站的数据包的所有请求头全部复制制成字典得到数据包之后再一个个删除键值对 数据包里面不是mp3结尾的下载链接 解决方法换网站这个可能是api反正我不会 没有找到数据包 解决方法换网站可能是反爬问题比较复杂 具体问题具体分析有其他问题评论区见 处理数据包 也就是拿到网站返回的数据包后对数据包进行拆解 这个数据包一般是json格式所以用json进行解析不要用text了 import pprint import re import requestsdef get_url(input,pages1):url https://music.txqq.pro/data {input: input,filter: name,type: netease,page: pages}header {x-requested-with:XMLHttpRequest}rt requests.post(urlurl,headersheader,datadata)rt.encoding rt.apparent_encodinglinks rt.json()# print(links)re_code links[code]print(re_code)mp3_links links[data]track_links []for link0 in mp3_links:downloed_url link0[url]title link0[title]author link0[author]id re.findall(id(.*?).mp3,downloed_url)[0]# print(title,author,id,downloed_url)track_links.append([title,author,id,downloed_url])return track_links这个数据包一般返回一个字典第一个数据是code也就是状态码咱们一般用不到当然为了使代码更加健壮可以获取一下这个状态码 第二个数据就是各种歌曲的信息了包括歌曲的下载链接歌名歌手作词作曲等等很明显也是一个列表所以我使用了for循环依次拿数据来解析 列表里面的每一项都是字典所以我用取值的方式得到了对应的信息也就是23~25行 因为数据包里面有一套歌曲信息一个个返回比较麻烦就以列表的形式进行返回了 绑定爬虫 在上一步我们拿到了歌曲数据包也就是返回值的列表 函数的使命完成了 现在就是设计槽函数和按钮连接了 第一个槽函数–btn_search def btn_search(self):# print(点击搜索)self.page1 1pr_input self.ui.lineEdit.text()linlks get_url(pr_input,1)for linlk in linlks:self.ui.listWidget.addItem(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]}下载链接{linlk[3]})# print(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]})这个槽函数对应的就是搜索按钮我们想要搜索就要知道用户想要搜索什么所以使用lineEdit.text()得到输入框的内容 然后就是把得到的歌名给爬虫函数 然后把得到的信息放在listWidget里面使用addItem一行行的把内容填充进去 这里一般为了整洁会把下载链接隐藏那样就会导致一个问题下面你想要下载的时候还要去找这个链接老师的方法是把所有的链接和其他信息储存起来放在一个全局列表里面在以后想要下载的时候再去找 我感觉很麻烦确实是干净了但是代码的复杂程度就上去了还浪费了一定的内存空间去列表找链接也浪费时间 所以我把链接也一同放在listWidget里面了 第二个槽函数–btn_more def btn_more(self):pr_input self.ui.lineEdit.text()self.page1 1linlks get_url(pr_input, self.page1)for linlk in linlks:self.ui.listWidget.addItem(f歌名{linlk[0]}歌手{linlk[1]}id{linlk[2]}下载链接{linlk[3]})这个槽函数对应的是“更多”按钮也就是我们想要在同一歌名下得到更多的信息 因为数据包也有次序在网站上直接搜索歌曲得到的是页数为1的数据包再点击下一页又会刷新新的数据包得到页数为2的数据包等等 所以涉及一个页数的信息在init初始化里面定义一个变量page1这个变量是专门来定位数据包的 第三个槽函数–btn_clear def btn_clear(self):self.ui.lineEdit.clear()self.ui.listWidget.clear()self.page1 1这个槽函数是最简单的负责清理面板也就是点击‘’清理‘’的时候把lineEdit输入框和listWidget展示框清空有自带的clear函数 第四个槽函数–downloads_music def downloads_music(self,data): # 这里第二个参数就把双击对象的文本内容传过来了# print(data.text())data data.text()author re.findall(fr歌名(.*?),data)[0]song re.findall(fr歌手(.*?),data)[0]id re.findall(frid(.*?),data)[0]download_urls re.findall(下载链接(.*),data)[0]# print(author)# print(song)# print(id)# print(download_urls)# QMessageBox.information(self, 下载提示, f是否下载{song}-{author}?, QMessageBox.Yes | QMessageBox.No,QMessageBox.Yes) # 这里是下载前的提示我觉得没用就隐藏了code requests.get(download_urls)url_text code.textif ID3in url_text: # 因为mp3文件的开头都是ID3music requests.get(download_urls).contentif not os.path.exists(下载mp3):os.mkdir(下载mp3)# print(f下载mp3/{song}-{author}-{id}.mp3)with open(fr下载mp3/{song}-{author}-{id}.mp3, wb) as f:f.write(music)QMessageBox.warning(self, 下载提示, 下载成功)else:QMessageBox.warning(self,下载提示,f下载失败下载地址是{download_urls})这个槽函数负责处理咱们想要下载的歌曲也就是在展示框里面看到想要下载的歌曲双击一下直接下载 这里需要一个参数也就是想要下载的歌曲信息也就是列表的那一行信息我们只需要在参数里面加个data就可以得到双击的那一行信息 因为前面我把下载的链接写在了信息里面所以可以直接下载链接这里我拿了一下歌曲的名字和歌手来创建mp3文件因为涉及一个重名的问题我发现重名歌曲的id不同所以我还取了一下id来作为文件名经过这个组合就避免的重名的问题 遇到的问题 歌曲的下载链接无效因为涉及版权等等问题很多下载链接都是不能使用的但是这些链接都能正常访问 也就是说失效的地址和正常的地址都能正常访问 失效的地址打开是一个网站正常的地址打开就是mp3文件 这里还要再次判断一下链接是否失效发现mp3文件的开头是’’ID3‘‘而失效的地址一般没有 所以使用if判断‘’ID3“是否在网页源代码里面 为了让下载的歌曲比较集中我把所有的歌曲放在了文件夹里面名称就是下载mp3 打包exe 最后就是把写好的py程序打包毕竟费那么大精力不就是让不会python的人直接使用吗 要是仅仅下载歌曲不搞界面程序一个爬虫代码就结束了 这里使用pycharm里面的工具鼠标右键“打开于open in”----找到‘’终端‘’ 使用pyinstaller 输入指令-F -i 图标.ico 主函数main.py --noconsole意思是不要终端那个黑窗口 这里就是之前的文章写的打包命令在爬虫基础1里面的末尾 -F 生成exe文件 -i 设置图标
http://www.hkea.cn/news/14463444/

相关文章:

  • linux网站服务器配置优化搜狐的培训
  • 网站模板可以自己做吗商城网站开发实训报告
  • 建设企业银行网站多少钱滕州网站建设制作
  • 纵横网站建立网站建设必须买主机吗
  • 网站美工设计基础施工企业的安全生产责任制度
  • 中牟网站制作968深圳网站建设公司
  • wordpress做视频网站吗政协信息化网站建设的请示
  • 个人网站上线流程汽车网站建设策划书
  • 做网站需要的技术wordpress下载页面模板
  • 免费的app软件下载网站广州市官网网站建设公司
  • 微商城网站建设如何赣州建设工程信息网
  • 宁波网站建设运营设计公司企业网站
  • 帮人做网站一定要先收费wordpress 归档文章
  • 公司网站制作内容河北建设人才网官网
  • 新开的公司建立网站有哪些要做的做公司网站找谁
  • 企业形象网站怎么做青浦网站建设公司
  • 漳平网站建设一级a做爰片试看 免费网站
  • 搜狗网站做滤芯怎么样手机网站如何优化
  • saas电商建站系统南宁网站制作最新招聘信息
  • 网站 代理 备案 费用怎样创建基本的网站
  • 上海网站设计建设便宜网站建设哪家好
  • 安卓网站开发平台建设个电影网站多少钱
  • 陕西交通建设养护工程有限公司网站自己网站联系电话修改怎么做
  • 五大类型网站市场研究公司
  • 建网站做站在物流网站的建设
  • saas建站唯美网站建设
  • 标准网站是哪个企业网站设计教程
  • 个人或主题网站建设 实验体会小说网站的内容做
  • 建网站卖产品h5免费模板网站
  • 哪家公司做企业网站网站添加手机站