欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

python爬虫学习笔记

时间:2023-04-27
1、数据来源于B站

源码视频链接:【python实战教程】从零带你用python打造全网音乐下载器_哔哩哔哩_bilibili【python实战教程】从零带你用python打造全网音乐下载器https://www.bilibili.com/video/BV1xv411i7DV/?spm_id_from=333.788

资源网站:http://www.qyun.vip/music/?name=%E5%90%8E%E6%9D%A5&type=kugou

2、前端设计 页面效果图:

 使用效果图:

 前端代码:

from tkinter import *# 一、前端界面设计# 1、窗体主体设计# 创建窗体root = Tk()# 设置标题root.title('下载器 v0.1')# 设定窗口界面的大小width = 610height = 455# 设置在屏幕中心打开窗口screen_width, screen_height = root.maxsize() #获取当前屏幕的最大的长、宽root_place = '%dx%d+%d+%d' % (width, height, (screen_width - width) / 2, (screen_height - height) / 2) #拼接窗体大小、位置参数root.geometry(root_place) #设定打开的窗体的位置# 2、窗体内容设计,使用grid(网格)布局:行+列格式# 全局参数,设定整体的字体、大小font = ('华文行楷', 18)# 第一行布局设定:标签(直接显示文字)+输入框label = Label(root, text='请输入下载的资源链接(URL):', font=font).grid() #标签entry = Entry(root, font=font).grid(row=0, column=1) #输入框# 第二行布局设定:文本框(不可在前端进行输入操作),可使用函数在其中输出对应的数据text = Listbox(root, font=font, width=50, height=15).grid(row=1, columnspan=2)# 第三行布局设定:下载按钮、退出按钮# 下载按钮:功能(点击后执行回调函数功能,即后端的下载数据的函数),使用command参数绑定后端自定义参数get_urldownload_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quitexit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)# 3、持续打开窗体,方便用户使用root.mainloop()

3、后端逻辑(功能,使用爬虫实现)

import osfrom urllib.request import urlretrieveimport requestsimport jsonpath# 二、功能(爬虫实现)# 歌曲下载函数def song_download(url, title): # 创建文件夹 os.makedirs('音乐', exist_ok=True) path = '音乐{}.mp3'.format(title) # 文本框信息提示 text.insert(END, '歌曲:{},正在下载...'.format(title)) # 文本框滚动 text.see(END) # 更新 text.update() # 下载 # requests.get() #使用requests模块的get方法获取文件 urlretrieve(url, path) # 使用内置的urlretrieve模块获取文件,更快速 # 下载完毕提示 text.insert(END, '下载完毕:{},敬请欣赏!'.format(title)) # 文本框滚动 text.see(END) # 更新 text.update()# 搜索歌曲名def get_music_name(): name = entry.get() headers = { # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36', # 'cookie': 'td_cookie = 2230107881', 'X-Requested-With': 'XMLHttpRequest' # 判断请求是ajax同步还是异步 } params = { 'input': name, 'filter': 'name', 'type': 'kugou', 'page': 1, } url = 'http://www.qyun.vip/music/' response = requests.post(url=url, data=params, headers=headers) # print(response.text) #文本形式打印网页源码 # print(response.content.decode('utf-8')) # 如出现乱码可以使用本方法转码后打印网页源码 # print(response.json()) # 响应返回数据为json时,要使用json进行数据解析 data = response.json() # 返回当前页面的歌曲,解析结果为列表 title = jsonpath.jsonpath(data, "$..title")[0] author = jsonpath.jsonpath(data, "$..author")[0] url = jsonpath.jsonpath(data, "$..url")[0] print(title, author, url) song_download(url, title)

4、使用pyinstaller模块对代码进行打包

打开cmd,使用pyinstaller -F 文件目录 进行打包

pyinstaller -F D:PYTHON7爬虫2实战项目1音乐下载器1全网音乐下载器.py #py文件的完整链接

5、总结拓展

import osfrom tkinter import *from urllib.request import urlretrieveimport requestsimport jsonpath# 2、下载资源函数def download(url, title): # 调用os模块,新建文件夹并命名,同时检查文件夹如果已存在就不再重新创建 os.makedirs('资源', exist_ok=True) # 设置获取到的资源名称及格式,并将获取到的资源标题写入标题中 path = '资源{}.mp4'.format(title) # 在前端的text文本框中显示提示:下载中... text.insert(END, '{}正在下载...'.format(title)) text.see(END) text.update() # 根据url获取资源,并将获取到的资源保存到本地路径中 urlretrieve(url, path) # 在前端的text文本框中显示提示:下载完成! text.insert(END, '{}下载完毕!'.format(title)) text.see(END) text.update()# 1、获取资源信息、下载链接函数def get_url(): # 使用抓包工具获取requests.post的主要参数,Http请求头信息 # headers:字典格式,请求标头信息,主要包含: # User-Agent:浏览器信息、 # cookie:客户端会话技术,将数据保存到客户端,在不登陆的情况下完成服务器对客户端的身份识别、 # X-Requested-With:判断请求类型是否为Ajax请求 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.50', 'cookie': '' } # params表单数据 params = { 'CourseChapters_ID': '666', 'LookType': 0, 'LookTime': 1, 'IP': '210.21.231.98' } # 从前端输入框获取资源的url链接 # url = entry.get() url = '..' # 使用requests的post方法获取响应数据 response = requests.post(url=url, data=params, headers=headers) # 由于获取到的数据为json格式信息,需对信息进行解析 data = response.json() # 使用jsonpath模块的jsonpath方法,对json中的信息进行解析,获取RequestId对应的value值 # jsonpath(json文件,"$..关键字"),返回json文件中的关键字对应的数据,返回值为列表 RequestId = jsonpath.jsonpath(data, "$..RequestId") #取出列表的值 # 输出RequestId列表检查数据 print(RequestId[0]) # 输出资源的标题、作者、资源链接url # print(title, author, url) # 执行下载函数,将解析到的资源链接保存到本地 # download(url, title)get_url()# 一、前端界面设计# 1、窗体主体设计# 创建窗体root = Tk()# 设置标题root.title('下载器 v0.1')# 设定窗口界面的大小width = 610height = 455# 设置在屏幕中心打开窗口screen_width, screen_height = root.maxsize() #获取当前屏幕的最大的长、宽root_place = '%dx%d+%d+%d' % (width, height, (screen_width - width) / 2, (screen_height - height) / 2) #拼接窗体大小、位置参数root.geometry(root_place) #设定打开的窗体的位置# 2、窗体内容设计,使用grid(网格)布局:行+列格式# 全局参数,设定整体的字体、大小font = ('华文行楷', 18)# 第一行布局设定:标签(直接显示文字)+输入框label = Label(root, text='请输入下载的资源链接(URL):', font=font).grid() #标签entry = Entry(root, font=font).grid(row=0, column=1) #输入框# 第二行布局设定:文本框(不可在前端进行输入操作),可使用函数在其中输出对应的数据text = Listbox(root, font=font, width=50, height=15).grid(row=1, columnspan=2)# 第三行布局设定:下载按钮、退出按钮# 下载按钮:功能(点击后执行回调函数功能,即后端的下载数据的函数),使用command参数绑定后端自定义参数get_urldownload_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quitexit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)# 3、持续打开窗体,方便用户使用root.mainloop()

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。