「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」
这篇讲一讲音乐系统的爬虫功能模块。
爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
上面这一段摘自百度百科,解释的太官方,很多人看不懂什么意思,简单来讲,爬虫就是把一个网站上的信息抓取,捕获,把这些信息弄下来,按照自己想要的形式呈现出来。
一般来讲,爬虫的主要语言是python,用phython爬取网站上的信息最方便。但是呢,也可以用java,只不过python最方便。
为什么音乐系统要用爬虫呢?这是让网站功能更加丰富,如果网站简单,形式太单一,让人看不出亮点。
音乐系统爬虫主要爬取哪些信息呢?主要爬取新闻,让人耳目一新,眼前一亮。
音乐系统爬取音乐网站上的音乐不可以吗?可以的,如果只是爬取音乐,很多关于音乐的功能就会用不上了,所以这里没有爬取音乐。
好了,上面关于爬虫业务相关的背景,接下来直接说技术了。
前端
$.ajax({
"url": basePath+"/news.do",
"method": "get",
success: function (resp) {
resp = JSON.parse(resp);
var news = resp[Object.keys(resp)[0]];
var str = "";
for (var i = 1; i < news.length; i++) {
str += "<li>";
str += "<a class='title' href='" + news[i].url_3w + "' style='color: #000' target='_blank'>";
str += news[i].title;
str += "</a>";
str += "</li>";
}
$("#news_ul").append(str);
}
});
向后端发送请求,前端填充新闻内容。
后端代码
@RequestMapping("/news")
@ResponseBody
public String news(){
HttpURLConnection connection = null;
InputStream is = null;
BufferedReader br = null;
StringBuilder result = new StringBuilder();
try {
URL url = new URL("http://c.m.163.com/nc/article/headline/T1348649580692/0-40.html");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(15000);
//开始连接
connection.connect();
//获取响应数据
if (connection.getResponseCode() == 200) {
is = connection.getInputStream();
if (null != is) {
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String temp;
while (null != (temp = br.readLine())) {
result.append(temp);
}
}
}
} catch (Exception e) {
return null;
} finally {
if (null != br) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//关闭远程连接
if (null != connection) {
connection.disconnect();
}
}
return result.toString().replaceAll("%(?![0-9a-fA-F]{2})","%25");
}
代码讲解: 1、创建访问链接:HttpURLConnection connection 2、创建连接URL url,指定爬虫要访问的链接 3、设置请求方式:connection.setRequestMethod("GET");请求方式主要有GET,POST,PUT,DELETE等等 4、设置连接超时时间:connection.setReadTimeout(15000);单位时间是毫秒,如果访问超过这个时间,就不再去访问了 5、访问状态:connection.getResponseCode() == 200 访问状态有几种常见的,200表示正常的,OK的,404表示资源不存在,505表示内部资源错误 6、获取返回的数据:is = connection.getInputStream(); 7、中途是读取数据 8、最后记得要关闭资源
实现效果