博客
关于我
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实现lfu cache缓存算法(附完整源码)
    查看>>
    Objective-C实现LFU缓存算法(附完整源码)
    查看>>
    Objective-C实现linear algebra线性代数算法(附完整源码)
    查看>>
    Objective-C实现linear congruential generator线性同余发生器算法(附完整源码)
    查看>>
    Objective-C实现linear discriminant analysis线性判别分析算法(附完整源码)
    查看>>
    Objective-C实现linear regression线性回归算法(附完整源码)
    查看>>
    Objective-C实现linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现Linear search线性搜索算法(附完整源码)
    查看>>
    Objective-C实现LinearSieve线性素数筛选算法 (附完整源码)
    查看>>
    Objective-C实现LinkedListNode链表节点类算法(附完整源码)
    查看>>
    Objective-C实现LinkedList链表算法(附完整源码)
    查看>>
    Objective-C实现local weighted learning局部加权学习算法(附完整源码)
    查看>>
    Objective-C实现logistic regression逻辑回归算法(附完整源码)
    查看>>
    Objective-C实现logistic sigmoid函数(附完整源码)
    查看>>
    Objective-C实现longest Common Substring最长公共子串算法(附完整源码)
    查看>>
    Objective-C实现longest increasing subsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现longestCommonSubsequence最长公共子序列算法(附完整源码)
    查看>>
    Objective-C实现LongestIncreasingSubsequence最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现lorenz transformation 洛伦兹变换算法(附完整源码)
    查看>>
    Objective-C实现Lower-Upper Decomposition上下分解算法(附完整源码)
    查看>>