介绍
从网上看到了一个java爬虫的教学,觉得挺有意思,就用来爬取一下网易云歌单,看一下什么歌单播放次数最多。利用Jsoup可以很轻松的对内容进行提取,有点类似于Jquery选择器的语法,利用HttpClient能够轻松的发送请求。然后就顺便把爬取的流行和民谣的歌单爬到了数据库,由于全部爬取数据量太大,所以只是爬取的前8页的歌单。
利用一下代码可以获取到网页内容的输入流。HttpClient hc = new DefaultHttpClient();HttpGet hg = new HttpGet(url_str);HttpResponse response = hc.execute(hg);HttpEntity entity = response.getEntity();InputStream htm_in = entity.getContent();
通过自己定义的方法,将输入流转换为字符串
public static String InputStream2String(InputStream in, String encoding) throws Exception { StringBuffer out = new StringBuffer(); InputStreamReader inread = new InputStreamReader(in, encoding); char[] b = new char[4096]; for (int n; (n = inread.read(b)) != -1;) { out.append(new String(b, 0, n)); } return out.toString();}
得到了内容后便可以用Jsoup解析,通过浏览器自带的开发者工具,分析选取哪一个<div>里面的内容
Document doc = Jsoup.parse(htm_str);Elements links = doc.select("div[class=g-bd]").select("div[class=g-wrap p-pl f-pr]").select("ul[class=m-cvrlst f-cb]").select("div[class=u-cover u-cover-1");for (Element link : links) { Elements lin = link.select("a"); String re_url = lin.attr("href"); String re_title = lin.attr("title"); System.out.print(re_title + " "); System.out.print(re_url + " ");}
最后分享一下爬取的民谣和流行的歌单(都是播放排行前5的)。
流行 你知道思念一个人的滋味吗 一首歌让你回到中学时代 将回忆酿成烈酒入喉 从此不再挽留不再回头 华语|那些温暖男声听起来总让人心疼 2016年度最热新歌TOP100 民谣 如果你想听民谣,可以从这些歌曲开始。 孤独旅人配民谣。 民谣是最安静的角落 你若听过他的歌,此生便有了挂念 华语女声丨若失意时 让这些歌给你一个拥抱