博客
关于我
Java爬取网易云音乐歌手所有专辑信息
阅读量:280 次
发布时间:2019-03-01

本文共 2758 字,大约阅读时间需要 9 分钟。

package com.ssm.jsoup.music;import com.ssm.utils.FileUtils;import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.io.*;import java.util.ArrayList;import java.util.List;public class WyyAlbum {    public static void main(String[] args) {        readSingerAlbumData();    }    private static void readSingerAlbumData() {        try {            FileReader fr = new FileReader(new File("g://singerId.json"));            BufferedReader br = new BufferedReader(fr);            String line;            while ((line = br.readLine()) != null) {                String url = String.format(                    "https://music.163.com/artist/album?id=%s&limit=150&offset=0",                    line                );                getData(url);            }        } catch (IOException e) {            e.printStackTrace();        }    }    public static void getData(String url) {        try {            Document doc = Jsoup.connect(url)                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36")                .headers(                    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",                    "Accept-Encoding: gzip, deflate, br",                    "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8",                    "Cookie: [此处应替换为实际cookie值]",                    "Referer: https://music.163.com/discover/artist/cat?id=1001&initial=65",                    "Upgrade-Insecure-Requests: 1"                )                .method(Connection.Method.GET)                .timeout(200000)                .get();            String singer = doc.title().replace(" - 网易云音乐", "");            Elements albums = doc.select("#m-song-module li a.s-fc0");            for (Element album : albums) {                String albumName = album.text();                String albumId = album.attr("href")                    .replace("/album?id=", "")                    .trim();                String data = String.format(                    "{\"singer\":\"%s\",\"albumName\":\"%s\",\"albumId\":\"%s\"}",                    singer,                    albumName,                    albumId                );                FileUtils.saveConToFile(data, "g://singerAlbum.json");            }        } catch (IOException e) {            e.printStackTrace();        }    }}

以上代码经过以下优化:

  • 删除了所有无效的注释和多余的代码
  • 删除了所有img标签相关的处理
  • 删除了JavaScript跳转的链接
  • 优化了代码的结构,使其更符合Java编码规范
  • 增加了更多的异常处理
  • 优化了变量命名,使其更具描述性
  • 删除了不必要的文档注释
  • 保持了代码的核心功能不变,但使其更简洁易读
  • 增加了对singer信息的提取逻辑
  • 优化了数据存储方式
  • 以上代码可以直接用于实际爬取网易云音乐歌手专辑信息的任务,建议在实际使用前替换成真实的cookie值,并确保有相应的权限和资源支持。

    转载地址:http://klko.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现cocktail shaker sort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现cocktailShakerSort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现CoinChange硬币兑换问题算法(附完整源码)
    查看>>
    Objective-C实现collatz sequence考拉兹序列算法(附完整源码)
    查看>>
    Objective-C实现Collatz 序列算法(附完整源码)
    查看>>
    Objective-C实现comb sort梳状排序算法(附完整源码)
    查看>>
    Objective-C实现combinationSum组合和算法(附完整源码)
    查看>>
    Objective-C实现combinations排列组合算法(附完整源码)
    查看>>
    Objective-C实现combine With Repetitions结合重复算法(附完整源码)
    查看>>
    Objective-C实现combine Without Repetitions不重复地结合算法(附完整源码)
    查看>>
    Objective-C实现conjugate gradient共轭梯度算法(附完整源码)
    查看>>
    Objective-C实现connected components连通分量算法(附完整源码)
    查看>>
    Objective-C实现Connected Components连通分量算法(附完整源码)
    查看>>
    Objective-C实现Convex hull凸包问题算法(附完整源码)
    查看>>
    Objective-C实现convolution neural network卷积神经网络算法(附完整源码)
    查看>>
    Objective-C实现convolve卷积算法(附完整源码)
    查看>>
    Objective-C实现coulombs law库仑定律算法(附完整源码)
    查看>>
    Objective-C实现counting sort计数排序算法(附完整源码)
    查看>>
    Objective-C实现countSetBits设置位的数量算法(附完整源码)
    查看>>
    Objective-C实现currency converter货币换算算法(附完整源码)
    查看>>