jsoup解析百度音乐

本文介绍了一款用于爬取百度音乐歌手列表的Java程序。该程序利用Jsoup库解析网页,实现了从指定页面抓取歌手名称及链接的功能,并将数据写入文件。文章提供了完整的源代码示例。

导入相应的jar包

****************************************************

package com.segsec.crm.baidu;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class BaiduMp3 {
    private BaiduMp3(){}
    private static BaiduMp3 mp3;
    static{
        mp3=new BaiduMp3();
    }
    public synchronized static BaiduMp3 getInstance(){
        if(mp3==null){
            mp3=new BaiduMp3();
        }
        return mp3;
    }
    /*
     * 解析歌手
     */
    //http://list.mp3.baidu.com/top/singer/A.html
    public String parseSingerlist(String charCode){
        String html="http://list.mp3.baidu.com/top/singer/"+charCode+".html";
        try {
                URL url=new URL(html);   
                Document doc=Jsoup.parse(url,1000*100);
                //根据唯一标识解析
                Element singerlistDiv=doc.getElementsByAttributeValue("class", "content").first();
                //Element singerlistDiv=doc.getElementsByClass(className)
                Elements links=singerlistDiv.getElementsByTag("a");
                for(Element link:links){
                    String linkHref=link.attr("href");
                    String linkText=link.text().trim();
                    System.out.println(linkText);               
                    //System.out.println("linkHref"+linkHref);

                    if(!"".equals(linkText)){
                       writetofile(charCode,linkText,linkHref,"f:/baiduSinger.txt");
                    }
                   
                }
           
           
            //System.out.println(links.size());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
    public List<String> getCharCode(){
        String url="http://list.mp3.baidu.com/top/singer/A.html";
        List<String> charlist=new ArrayList<String>();
        try {
            URL u=new URL(url);
            Document doc=Jsoup.parse(u, 1000*10);
            Element charBarDiv=doc.getElementsByAttributeValue("class", "bar").first();
            Elements links=charBarDiv.getElementsByTag("a");
            for(Element link:links){
                charlist.add(link.text().trim());
            }
            System.out.println(charlist.size());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return charlist;
    }
    /*
     * 解析所有歌曲
     */
    //http://mp3.baidu.com/m?rf=top-singer&tn=baidump3&ct=134217728&lm=-1&word=%B0%B2%BF%B5
    public String parseSongsBySinger(String singerName){

        return "";
    }
    public void writetofile(String charCode,String line,String url,String dir){
        BufferedWriter bww=null;
 
        try {
            bww=new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream("f:/baiduSinger.txt",true),"UTF-8"));
            StringBuffer s = new StringBuffer();
            s.append(line).append("|").append(charCode);
            bww.write(s.toString().trim());
            bww.newLine();
            bww.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            freeIO(bww);
        }
    }
    public void freeIO(BufferedWriter bww){  
            try {
                if(bww!=null)
                bww.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        BaiduMp3 mp3=new BaiduMp3();
        List<String> strs=mp3.getCharCode();
        for(int i=0;i<strs.size()-1;i++){
            mp3.parseSingerlist(strs.get(i));
        }
    }

}
**********************************

此程序只解析出了百度音乐歌手 解析歌曲其实方法类似 只是唯一标识不同

本文出自 “java爱好者” 博客,请务必保留此出处http://hzywy.blog.51cto.com/3249210/736461

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值