您的位置:首页 > 编程语言 > Python开发

在java中运行的Python脚本(抓取网易云音乐数据)的简单事例代码(精简版)

2020-06-23 04:17 573 查看

这篇文章是精简版的,详情可以看我另一篇文章:https://blog.csdn.net/ZLZQ_Yuan/article/details/105374629

主要思路是: 用python写抓取数据的部分,然后用java代码,通过执行cmd命令直接执行python脚本,再通过java的swing工具进行页面展示。

1.python程序代码:

   抓取网易云音乐某个播放页面上的歌曲名,及其地址(并将其下载在当前py文件的目录下)。

[code]# encoding=utf-8
import requests
from bs4 import BeautifulSoup
import urllib.request

headers = {
'Referer': 'http://mucis.163.com',
'Host': 'music.163.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
'Accept': 'text/html5,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}

# 歌单的url地址
play_url = 'http://music.163.com/playlist?id=2182968685'

# 获取页面内容
s = requests.session()
response = s.get(play_url, headers=headers).content

# 使用bs4匹配出对应的歌曲名称和地址
s = BeautifulSoup(response, 'lxml')
main = s.find('ul', {'class': 'f-hide'})

lists = []
for music in main.find_all('a'):
# print('{} : {}'.format(music.text, music['href']))
# 拼接出真正的路径
musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3'
musicName = music.text
# 单首歌曲的名字和地址放在list列表中
# list.append(musicName)
# list.append(musicUrl)
list = [musicName, musicUrl]
# 全部歌曲信息放在lists列表中
lists.append(list)

print("start--------------------------")
num = "该页面共有" + str(len(lists)) + "首歌曲。歌曲名及url地址如下:"
print(num)
for i in lists:
name = i[0]
url = i[1]
print(name + " : " + url)
print("end--------------------------")

# 下载列表中的全部歌曲,并以歌曲名命名下载后的文件,文件位置为当前文件夹
# for i in lists:
# i = lists[1]
# url = i[1]
# name = i[0]
# try:
#     print('正在下载', name)
#     urllib.request.urlretrieve(url, './%s.mp3' % name)
#     print('下载成功')
# except:
#     print('下载失败')

2.java代码:

   主函数Main启动Display界面显示,“运行”按钮监听点击事件,点击后调用ConnectPython类实现cmd命令框运行py脚本。

[code]/**
* 运行py脚本
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class ConnectPython {
public String getData() {

String returnResult= "";
StringBuilder sb =new StringBuilder();

try {
Process process = Runtime.getRuntime().exec("python E:\\MusicData.py" );

InputStreamReader ir = new InputStreamReader(process.getInputStream(),"GBK");
String result =null;
LineNumberReader input = new LineNumberReader(ir);
while((result= input.readLine())!=null) {
//returnResult+=result+"";
//拼接更快
sb.append(result).append("\r\n");
}
returnResult=sb.toString();

input.close();
ir.close();
process.waitFor();
} catch (Exception e) {
System.out.println("调用python脚本并读取结果时出错:" + e.getMessage());
}
return returnResult;
// System.out.println("程序已被执行!");
}

}

 

[code]/**
* 界面显示
*/
import java.awt.Dimension;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Display implements ActionListener{

javax.swing.JButton btn2;
javax.swing.JTextArea wbk1;

public Display() {
// TODO Auto-generated constructor stub
javax.swing.JFrame jf=new javax.swing.JFrame();
jf.setTitle("抓取网易云音乐数据运行界面");
jf.setSize(600,450);
jf.setLocationRelativeTo(null);
//流式布局
java.awt.FlowLayout flow=new java.awt.FlowLayout();
jf.setLayout(flow);
//单行文本域
wbk1=new javax.swing.JTextArea("请点击运行按钮");
java.awt.Dimension dm=new java.awt.Dimension(580, 350);
wbk1.setPreferredSize(dm);
JScrollPane jsp=new JScrollPane(wbk1);
jf.add(jsp);
javax.swing.JButton btn1=new javax.swing.JButton("上一页");
btn2=new javax.swing.JButton("运行");
btn2.addActionListener(this);
javax.swing.JButton btn3=new javax.swing.JButton("下一页");
jf.add(btn1);
jf.add(btn2);
jf.add(btn3);
jf.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==btn2) {
ConnectPython cpython = new ConnectPython();
if(cpython.getData()!=null) {
wbk1.setText(cpython.getData());
}
}
}
}
[code]/**
* 主函数
* @author ZLZQ_Yuan
*
*/
public class Main {
public static void main(String[] args) {
Display display = new Display();
}
}

3.运行结果:

  注意:运行前一定要先在cmd命令框中下载所有py文件需要的依赖包。(具体参考开头链接里被红色字体标注的部分)

                   

                     

                                  由于没有写分页功能,剩下的歌曲数据未显示出来。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐