Java爬取网易云音乐民谣并导入Excel分析

前言

考虑到这里有很多人没有接触过Java网络爬虫,所以我会从很基础的Jsoup分析HttpClient获取的网页讲起。了解这些东西可以直接看后面的“正式进入案例”,跳过前面这些基础。我导入的是“Excel转换工具XXL-EXCEL”这个开源项目然后在这个基础上写的这个Demo(下面会详细分析).看了这篇文章还有问题,记得给我留言我会尽力帮你解决。如果文章哪里有问题或者需要改进,也请留言告诉我,共同进步。

项目分析

几天前用HttpClien+Jsoup把网易云音乐的民谣抓取下来,可惜显示效果是下面这样的:

Java爬取网易云音乐民谣并导入Excel分析想着如果能像前几天用开源的爬虫爬取知乎后然后导入Excel简单分析也好一点,如下图(下图只是简单的对导入进去的一个人的关注者做了一个排序):Java爬取网易云音乐民谣并导入Excel分析通过查阅文档知道Apache下有一个专门操作office各种文档的API:POI,用这个API的话操作起来原理也很简单,但是很麻烦需要写很多代码,而且条理也不是很清楚。所以去Github上找了找有没有更方便的方法,Github有很多关于这方面的开源项目,经过各种尝试,最终选择了:《Java对象和Excel转换工具XXL-EXCEL》,通过这个框架可以灵活的进行Java对象和Excel文档相互转换。

然后最终就是下面这个效果:

Java爬取网易云音乐民谣并导入Excel分析

案例基础

①Jsoup解析网页分析

Maven依赖:

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.7.2</version>
		</dependency>

请求网页和解析网页,我们都以推酷网:www.tuicool.com/为例子。先看一个实例(本实例获取的是推酷网首页的热门文章的信息):

package news;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class TuicoolHotArticles {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String url = "https://www.tuicool.com/";
		Document document = Jsoup.connect(url)
				.userAgent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0").get();

		// #id: 通过ID查找元素,比如:#logo
		Elements items = document.select(".list_article_item ");
		System.out.println(items.size());
		for (Element item : items) {
			// 标题。(类名title下的 a标签的title属性获取)
			String title = item.select(".title a").attr("title");
			// 标题图片地址(类名article_thumb_image下的 img标签的src属性获取)
			String picture_href = item.select(".article_thumb_image img").attr("src");
			// 时间 。(类名tip下的最后一个span标签的文字获取)
			String date = item.select(".tip span").last().text();
			// 作者 。(类名tip下的第一个span标签的文字获取)
			String author = item.select(".tip span").first().text();

			System.out.println("标题:               " + title);
			System.out.println("标题图片地址:" + picture_href);
			System.out.println("发布日期           " + date);
			System.out.println("作者                  " + author);
			System.out.println();
			System.out.println();
		}
	}

}

实例结果:

Java爬取网易云音乐民谣并导入Excel分析实例分析:
  1. 网页元素分析

元素位置->右键->查看元素(Inspent Element)

Java爬取网易云音乐民谣并导入Excel分析2. Jsoup解析通过元素分析我们即可获取所在div类名以及元素的其他属性,通过这些属性我们即可获取该元素。上面代码我已经给你详细的注释,如果还有问题可以留言给我。

如果想了解更详细的Jsoup操作请查看 jsoup中文文档。

②HttpClient请求网页分析

Maven依赖:

<!-- httpclient -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.4</version>
		</dependency>

下面是一个获取推酷首页源代码的例子:

package www.java1234.com.httpclientDemo2;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * TODO 在www.java1234.com.httpclientDemo.HelloWorld2我们获取推酷网热门文章
 * 我们这里通过模拟浏览器的方法来重新获取
 * 
 * @date 2017年12月16日
 */
public class GetTuicoolHotArticles {

	public static void main(String[] args) throws ClientProtocolException, IOException {
		// TODO Auto-generated method stub
		CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpClient实例
		HttpGet httpGet = new HttpGet("https://www.tuicool.com/"); // 创建httpget实例
		// 设置请求头信息Uer-Agent模拟浏览器
		httpGet.setHeader("User-Agent",
				"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0");
		CloseableHttpResponse response = httpClient.execute(httpGet); // 执行httpget请求
		// 获取响应状态
		//System.out.println("响应状态为:" + response.getStatusLine());
		HttpEntity entity = response.getEntity(); // 获取返回实体
		 System.out.println("网页内容:" + EntityUtils.toString(entity, "utf-8"));
		// 获取响应内容类型Content-Type
		// System.out.println("content-type:" + entity.getContentType());
		response.close(); // response关闭
		httpClient.close(); // httpClient关闭
	}

}

这个例子有一点需要说明的是因为推酷网设置了简单的反爬所以我们这里必须设置请求头信息Uer-Agent模拟浏览器访问,代码已经注释。

如果想深入学习HttpClient,请查看HttpClient官网。

③Maven的简单使用

网上有很多这面的教程,而且Maven这个工具真的很实用,不会的可以在网上找一找教程。再不会留言找我,我教,

相关推荐