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

最近在写大数据作业,老师要求抓取网易云音乐上的数据,并实现异步加载显示。现在刚写完前半部分,趁热打铁赶紧记下来。

主要思路是,用python写抓取数据的部分(听说他们是标配,python很适合爬数据),然后用java代码,通过执行cmd命令直接执行python脚本。简单粗暴。

因为完全不懂爬虫和也没用过python,然后我就疯狂百度,东拼西凑搞出来了点。所以不排除描述性错误。参考的原地址,贴在了底部。

由于电脑没有环境,所以我下了两个软件(非必须):pycharm(写python脚本)和eclipse(写java部分的代码)。


主要步骤:

1.下载python并安装。

注意pip这个工具,python自带的。可以通过cmd命令行,线上安装依赖库。

2.下载pycharm(可跳过)

3.写python程序:

# 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('下载失败')

4.下载java,安装,配置好环境变量。一套流程搞起来。

5.下载eclipse。(其他编辑器也可以)

6.写java程序。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class ConnectPython {
	public static void main(String[] args) {
		  try {       
	            Process process = Runtime.getRuntime().exec("python E:\\MusicData.py" );
	         
	            InputStreamReader ir = new InputStreamReader(process.getInputStream(),"utf-8");
	            
	            LineNumberReader input = new LineNumberReader(ir);
	            String result = null;
	            while((result= input.readLine())!=null) {
	            	System.out.println(result);
	            }
	            input.close();
	            ir.close();
//	            process.waitFor();
	        } catch (Exception e) {
	            System.out.println("调用python脚本并读取结果时出错:" + e.getMessage());
	        }
	        
	        System.out.println("程序已被执行!");
	}
}

详细步骤以及注意事项。

一、下载python并安装。

这是我下载的版本。

注意下载完后,升级pip版本:cmd界面(win+R),然后输入python -m pip install --upgrade pip setuptools wheel。

二、下载pycharm(可跳过)

我的版本:

下面是新建project的过程:

1.File->newProject->

2.新建py文件

3.导入需要的依赖File->settings->

直接搜名字,选择要下载的库,然后点击install package。

4.(可选)需要注意的是,由于默认是从国外下载的,可能下的比较慢。嫌慢的可以创建txt文件配置以下内容,再将后缀改为.ini,添加到下面的路径。

然后在刚才添加包的地方,添加路径。将下载源改到国内。

5.鼠标右键->run 程序,会弹出这个框,让你给程序选择依赖库。

三、写python程序:

不会python可以在这个网站查自己需要用的代码:https://www.runoob.com/python3/python3-list.html

方法一:在pycharm里写程序,运行结果如下。

 方法二:如果不想下程序可以用这个。

              新建一个文本文档,将python程序写进去,后缀修改为.py。

               在cmd命令框中运行pip install requests、pip install bs4 、pip install urllib和pip install lxml。下载python程序需要的依赖库。

              在cmd命令框中运行python E:\\MusicData.py(文件路径)。运行python程序。

四、(省)

五、(省)

六、写java程序

共有三种直接调用python脚本运行的方法,我用的是最简单也是比较适合这个程序的一种。

https://blog.csdn.net/qq_26591517/article/details/80441540

 运行结果:

 如果运行不出来,报空值。请检查一下,自己有没有把python程序所需要的依赖库,都在cmd命令框中用pip install下载了一遍。


python程序参考:https://blog.csdn.net/t8116189520/article/details/80251473

java程序参考:https://blog.csdn.net/qq_26591517/article/details/80441540

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值