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

主要思路是,用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并安装。

这是我下载的版本。

梦幻python脚本 python写梦幻西游脚本_eclipse

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

二、下载pycharm(可跳过)

我的版本:

梦幻python脚本 python写梦幻西游脚本_python_02

下面是新建project的过程:

1.File->newProject->

梦幻python脚本 python写梦幻西游脚本_eclipse_03

2.新建py文件

梦幻python脚本 python写梦幻西游脚本_eclipse_04

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

梦幻python脚本 python写梦幻西游脚本_梦幻python脚本_05

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

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

梦幻python脚本 python写梦幻西游脚本_eclipse_06

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

梦幻python脚本 python写梦幻西游脚本_pycharm_07

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

梦幻python脚本 python写梦幻西游脚本_eclipse_08

三、写python程序:

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

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

梦幻python脚本 python写梦幻西游脚本_python_09

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

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

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

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

四、(省)

五、(省)

六、写java程序

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


 运行结果:

梦幻python脚本 python写梦幻西游脚本_eclipse_10

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


python程序参考:

java程序参考: