栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫学习笔记

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 = 610
height = 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_url
download_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)
# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quit
exit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)
# 3、持续打开窗体,方便用户使用
root.mainloop()
3、后端逻辑(功能,使用爬虫实现)
import os
from urllib.request import urlretrieve
import requests
import 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 os
from tkinter import *
from urllib.request import urlretrieve
import requests
import 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 = 610
height = 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_url
download_button = Button(root, text='开始下载', font=font, command=get_url).grid(row=2, column=0)
# 退出按钮:功能(点击后关闭前端界面,退出程序),使用command参数绑定tkinter的自带功能quit
exit_button = Button(root, text='退出', font=font, command=root.quit).grid(row=2, column=1)
# 3、持续打开窗体,方便用户使用
root.mainloop()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743893.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号