最近在写大数据作业,老师要求抓取网易云音乐上的数据,并实现异步加载显示。现在刚写完前半部分,趁热打铁赶紧记下来。
主要思路是,用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