根据爬虫和tornado搭建百度音乐网站

根据爬虫和tornado搭建百度音乐网站。/20171225

测试:

from tornado import web, httpserver, ioloop

# 逻辑处理模块
class MainPageHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        # self.write('我的第一个简陋网站……')
        self.render('查找.html')
# 路由
application = web.Application([
            (r"/", MainPageHandler),
        ])
# application = web.Application([
#             (r"/index", MainPageHandler),
#         ])    # 127.0.0.1:8080/index

# socket服务
if __name__ == '__main__':
        http_server = httpserver.HTTPServer(application)
        http_server.listen(8080)  # 设置端口
        ioloop.IOLoop.current().start()


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>My First Shabby Web...</h1>
    <!--<a href="" download="download">下载</a>-->
</body>
</html>

class MainPageHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write('我的第一个简陋网站……')
        self.render('查找.html')

class GetMusicInfoHandler(web.RequestHandler):
    def post(self, *args, **kwargs):
        query = self.get_argument('query')
        print(query)
# 路由
application = web.Application([
            (r"/", MainPageHandler),
            (r"/query", GetMusicInfoHandler)
        ])

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>My First Shabby Web...</h1>
    <form action="/query" method="post">
        <p>请输入要搜索的歌手的名字:<input type="text" name="query"></p>
        <p><input type="submit" value="提交"</p>
    </form>
    <!--<a href="" download="download">下载</a>-->
</body>
</html>

 

为啥pycharm里面的html文件中,我把一条病句注释掉了,运行程序还会提示我出错啊啊啊啊啊!/20171226

 

project:

 

# 爬虫.py
import requests
import re
from fake_useragent import UserAgent
import json

def get_html(url):
    response = requests.get(url,headers = {'User-Agent':UserAgent().random})
    return response

def search_songs(singer_url):
    singer_response = get_html(singer_url)
    singer_response.encoding = 'utf-8'
    pattern = re.compile(r'sid":(\d+?),"', re.S)
    song_lists = re.findall(pattern, singer_response.text)
    for song_list in song_lists:
        yield song_list

def one_page(singer_url):
    FileLink_list=[]
    for sid in search_songs(singer_url):
        api = 'http://musicapi.qianqian.com/v1/restserver/ting?method=baidu.ting.song.play'\
              +'&format=jsonp&callback=jQuery1720006718159514979449_1513784517086&songid=%s&_=1513784517579' % sid
        api_response = get_html(api)
        FileLink_json = re.findall(r'\((.+)\)',api_response.text)[0]
        FileLink_json = json.loads(FileLink_json)
        FileLink_list.append(FileLink_json)
    return FileLink_list

def main(singer_name):
    singer_url = 'http://music.baidu.com/search?key=' + singer_name + '&jump=0&start=0&size=20&third_type =0'
    return one_page(singer_url)

if __name__ == "__main__":
    singer_name = input('输入要查询的歌手姓名:')
    main(singer_name)
    # test = main(singer_name)
    # print(test)
    # print(type(test), len(test))
<!--查找.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>姜枫渔火</title>
</head>
<body>
    <h1>My First Shabby Web...</h1>
    <form action="/query" method="post">
        <p>请输入要搜索的歌手的名字:<input type="text" name="query"></p>
        <p><input type="submit" value="提交"</p>
    </form>
    <!--<a href="" download="download">下载</a>-->
</body>
</html>
<!--音乐.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>歌曲列表</title>
</head>
<body>
    <!--{{ music }}-->
    <table>
    <tr>
        <th>序号</th>
        <th>歌名</th>
        <th>图片</th>
        <th>下载</th>
    </tr>
    {% for index, item in enumerate(music) %}
        <tr>
            <td>{{ index }}</td>
            <td>{{ item['songinfo']['title'] }}</td>
            <td><img src="{{ item['songinfo']['pic_small'] }}" alt=""></td>
            <td><a href="{{ item['bitrate']['file_link'] }}" download="download">下载</a> </td>
        </tr>
    {% end %}
    </table>
    <!--{% for i in music %}-->
        <!--<p>{{ i }}</p>-->
    <!--{% end %}-->
</body>
</html>
# 百度音乐网站……
from tornado import web, httpserver, ioloop
from 爬音乐 import main
# 逻辑处理模块
class MainPageHandler(web.RequestHandler):
    def get(self, *args, **kwargs):
        self.write('我的第一个简陋网站……')
        self.render('查找.html')

class GetMusicInfoHandler(web.RequestHandler):
    def post(self, *args, **kwargs):
        query = self.get_argument('query')
        print(query)
        music_info = main(query)
        # print(music_info[0], type(music_info), len(music_info))
        self.render('音乐.html', music = music_info)
# 路由
application = web.Application([
            (r"/", MainPageHandler),
            (r"/query", GetMusicInfoHandler)
        ])
# application = web.Application([
#             (r"/index", MainPageHandler),
#         ])    # 127.0.0.1:8080/index

# socket服务
if __name__ == '__main__':
        http_server = httpserver.HTTPServer(application)
        http_server.listen(8080)  # 设置端口
        ioloop.IOLoop.current().start()

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、项目简介本课程演示的是一套基于SSM实现的在线音乐网站,主要针对计算机相关专业的正在毕设的学生与需要项目实战练习的Java学习者。课程包含:1. 项目源码、项目文档、数据库脚本、软件工具等所有资料2. 带你从零开始部署运行本套系统3. 该项目附带的源码资料可作为毕设使用4. 提供技术答疑二、技术实现后台框架:Spring、SpringMVC、MyBatisUI界面:JSP、jQuery 、H-ui数据库:MySQL 三、系统功能本在线音乐网站采用JSP动态网页开发技术,JAVA编程语言,基于B/S架构,使用SSM框架技术,使用MySQL数据库,充分保证了系统的稳定性和安全性。该系统主要分为前台和后台两大功能模块,共包含两个角色:用户、管理员。具体的系统功能如下:1.前台功能 前台首页、音乐浏览、音乐搜索、音乐分类查找、音乐详情、音乐播放、音乐下载、添加收藏、新闻公告、留言交流、用户注册、用户登陆、个人中心、用户信息修改、我的收藏、意见反馈、修改密码等功能。2.后台功能 后台系统登陆、管理员管理、用户信息管理、音乐管理、音乐类型管理、新闻公告管理、用户评价管理、意见反馈管理、留言交流管理、消息回复管理等功能。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 四、项目截图1)前台首页2)音乐详情播放3)我的收藏4)音乐信息管理5)新增音乐  更多Java毕设项目请关注【毕设系列课程】https://edu.csdn.net/lecturer/2104   

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值