获取百度的歌曲名、歌手和链接!!
复制代码代码如下:
打包 webTools;
导入 java.io.BufferedReader;
导入java.io.IOException;
导入 java.io.InputStreamReader;
导入java.io.UnsupportedEncodingException;
导入 java.net.MalformedURLException;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入 dbTools.DBTools;
公共类 IOTOWeb {
公共字符串 getHtmlContent(字符串 htmlURL) {
网址 url = null;
字符串行内容=“”;
StringBuffer htmlContent = new StringBuffer();
尝试 {
url = 新网址(htmlURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
附寄();
} catch (MalformedURLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
返回 htmlContent.toString();
}
公共列表 getLink(String htmlContent) {
ArrayList listLink = new ArrayList();
字符串正则表达式 = "<td[^>]*>[//(]*<a[^>]*href=(/"([^/"]*)/"|/'([^/']* )/'|([^//s>]*))[^>]*>(.*?)[//)]*[//s]*</td>";
模式模式 = Pattern.compile(regex, Pattern.DOTALL);
匹配器 matcher = pattern.matcher(htmlContent);
while (matcher.find()) {
listLink.add(matcher.group());
}
返回列表链接;
}
公共列表<字符串> getHref(字符串htmlContent){
字符串正则表达式;
列表listtHref = new ArrayList();
正则表达式 = "href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*))/"";
模式 pa = Pattern.compile(regex, Pattern.DOTALL);
匹配器 ma = pa.matcher(htmlContent);
while (ma.find()) {
listtHref.add(ma.group().replaceFirst("href=/"", "").replace("/"",
“”));
}
返回列表tHref;
}
公共列表<字符串> getPerson(字符串htmlContent){
字符串正则表达式;
列表列表 = new ArrayList();
正则表达式 = "//(<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>] *))[^>]*>(.*?)//)";
模式 pa = Pattern.compile(regex, Pattern.DOTALL);
匹配器 ma = pa.matcher(htmlContent);
while (ma.find()) {
list.add(ma.group().replaceFirst("href=/"", "").replace("/"", ""));
}
返回列表;
}
公共列表<字符串> getSongName(字符串htmlContent){
字符串正则表达式;
列表 listPerson = new ArrayList();
正则表达式 = "<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*)) [^>]*>(.*?)</a>//s";
模式 pa = Pattern.compile(regex, Pattern.DOTALL);
匹配器 ma = pa.matcher(htmlContent);
while (ma.find()) {
listPerson.add(ma.group());
}
返回列表人;
}
公共字符串 getMainContent(字符串 htmlContent) {
字符串正则表达式=“<table width=/”100%/”align=/”center/”cellpadding=/”0/”cellspacing=/”0/”class=/”list/”>(.*?)</表>”;
StringBuffer mainContent = new StringBuffer();
模式模式 = Pattern.compile(regex, Pattern.DOTALL);
匹配器 matcher = pattern.matcher(htmlContent);
while (matcher.find()) {
mainContent.append(matcher.group());
}
返回 mainContent.toString();
}
公共字符串outTag(最终字符串s){
return s.replaceAll("<.*?>", "");
}
DBTools dbTools = new DBTools();
public void getFromBaiduMap3(String htmlURL) throws Throwable {
HashMap htmlContentMap = new HashMap();
字符串 htmlContent = getHtmlContent(htmlURL);
字符串 mainContent = getMainContent(htmlContent);
列表 listLink = getLink(mainContent);
for (int j = 0; j < listLink.size(); j++) {
String tdTag = listLink.get(j).toString();
列表歌曲名称列表 = getSongName(tdTag);
String SongName = outTag(songNameList.get(0).toString());
列表 personList = getPerson(tdTag);
字符串歌曲人=“”;
if (personList.size() != 0) {
for (int n = 0; n < personList.size(); n++) {
// System.out.println(personList.get(n).toString());
SongPerson = outTag(personList.get(n).toString());
}
} 别的 {
歌曲人=“无”;
}
// System.out.print(songNameList.get(0).toString());
列表 hrefList = getHref(songNameList.get(0).toString());
String SongHref = hrefList.get(0).toString();
System.out.println();
String sql = "插入歌曲(songName,songPerson,songHref)值(?,?,?)";
ArrayList list_values = new ArrayList();
list_values.add(songName);
list_values.add(songPerson);
list_values.add(songHref);
dbTools.update(sql, list_values);
}
}
}
DBTools数据库链接类:
复制代码代码如下:
打包 dbTools;
导入java.util.ArrayList;
导入 java.sql.*;
公共类 DBTools {
私人PreparedStatement准备好的声明;
私有结果集结果集;
private Connection 连接;
公共 DBTools() {
尝试 {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
尝试 {
连接 = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/TestURL", "root", "zhuyi");
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
公共 ArrayList 查询(字符串 sql,ArrayList list_values) 抛出 Throwable {
ArrayList listRows = new ArrayList();
prepareStatement = 连接.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
preparedStatement.setObject(i + 1, list_values.get(i));
}
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String[] rowinfo = new String[resultSet.getMetaData()
.getColumnCount()];
for (int i = 0; i < rowinfo.length; i++) {
rowinfo[i] = resultSet.getString(i + 1);
}
listRows.add(rowinfo);
}
返回列表行;
}
公共无效更新(字符串sql,ArrayList list_values)抛出Throwable {
prepareStatement = 连接.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
preparedStatement.setObject(i + 1, list_values.get(i));
}
preparedStatement.executeUpdate();
准备好的语句.close();
}
}
Servlet调用:
复制代码代码如下:
封装控制器;
导入java.io.IOException;
导入 java.io.PrintWriter;
导入java.util.List;
导入 javax.servlet.ServletException;
导入 javax.servlet.http.HttpServlet;
导入 javax.servlet.http.HttpServletRequest;
导入 javax.servlet.http.HttpServletResponse;
导入 webTools.IOTOWeb;
公共类 TestURL 扩展 HttpServlet {
/**
* 对象的构造函数。
*/
公共测试URL() {
极好的();
}
/**
* servlet 的销毁。 <br>
*/
公共无效销毁(){
超级.destroy(); // 只需将“destroy”字符串放入日志中
// 把你的代码放在这里
}
/**
* Servlet 的 doGet 方法。 <br>
*
* 当表单的标签值方法等于 get 时调用此方法。
*
* @参数请求
* 客户端向服务器发送的请求
* @参数响应
* 服务器发送给客户端的响应
* @抛出ServletException
* 如果发生错误
* @抛出IOException
* 如果发生错误
*/
public void doGet(HttpServletRequest 请求,HttpServletResponse 响应)
抛出 ServletException、IOException {
尝试 {
IOTOWeb iotoWeb = new IOTOWeb();
iotoWeb.getFromBaiduMap3("http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2");
} catch (Throwable e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
/**
* servlet 的 doPost 方法。 <br>
*
* 当表单的标签值方法等于时调用此方法
* 邮政。
*
* @参数请求
* 客户端向服务器发送的请求
* @参数响应
* 服务器发送给客户端的响应
* @抛出ServletException
* 如果发生错误
* @抛出IOException
* 如果发生错误
*/
公共无效doPost(HttpServletRequest请求,HttpServletResponse响应)
抛出 ServletException、IOException {
response.setContentType("text/html");
PrintWriter 输出 = response.getWriter();
出去
.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 过渡 //EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>一个 Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print("这是");
out.print(this.getClass());
out.println(",使用POST方法");
out.println("</BODY>");
out.println("</HTML>");
出.flush();
关闭();
}
/**
* servlet 的初始化。 <br>
*
* @抛出ServletException
* 如果发生错误
*/
公共无效 init() 抛出 ServletException {
// 把你的代码放在这里
}
}
获取金书网的图书名称:
复制代码代码如下:
打包 webTools;
导入 java.io.BufferedReader;
导入 java.io.InputStreamReader;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入 dbTools.DBTools;
公共类 GetBook {
public String getHtmlContent(String htmlURL) throws Throwable {
网址 url = null;
字符串行内容=“”;
StringBuffer htmlContent = new StringBuffer();
url = 新网址(htmlURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
附寄();
返回 htmlContent.toString();
}
公共字符串 getBookName(字符串 htmlContent) {
String 书名 = "";
字符串正则表达式 = "<span class=/"style15/">[^>]*</span>";
模式模式 = Pattern.compile(regex, Pattern.DOTALL);
匹配器 matcher = pattern.matcher(htmlContent);
if (matcher.find()) {
书名 = matcher.group();
}
返回书名;
}
公共字符串outTag(最终字符串s){
return s.replaceAll("<.*?>", "");
}
DBTools dbtools = new DBTools();
public void getFromJINSHU(String htmlURL) throws Throwable {
字符串 htmlContent = getHtmlContent(htmlURL);
String bookName = outTag(getBookName(htmlContent));
if (书名!= null && !"".equals(书名)) {
System.out.println(书名);
String sql = "插入bookinfo(bookName)值(?)";
ArrayList list_values = new ArrayList();
list_values.add(书名);
dbtools.update(sql, list_values);
}
}
}
调用Servlet:
复制代码代码如下:
封装控制器;
导入java.io.IOException;
导入 java.io.PrintWriter;
导入 javax.servlet.ServletException;
导入 javax.servlet.http.HttpServlet;
导入 javax.servlet.http.HttpServletRequest;
导入 javax.servlet.http.HttpServletResponse;
导入 webTools.GetBook;
公共类 TestBook 扩展 HttpServlet {
/**
* 对象的构造函数。
*/
公共测试书(){
极好的();
}
/**
* servlet 的销毁。 <br>
*/
公共无效销毁(){
超级.destroy(); // 只需将“destroy”字符串放入日志中
// 把你的代码放在这里
}
/**
* Servlet 的 doGet 方法。 <br>
*
* 当表单的标签值方法等于 get 时调用此方法。
*
* @参数请求
* 客户端向服务器发送的请求
* @参数响应
* 服务器发送给客户端的响应
* @抛出ServletException
* 如果发生错误
* @抛出IOException
* 如果发生错误
*/
整数 i = 1;
public void doGet(HttpServletRequest 请求,HttpServletResponse 响应)
抛出 ServletException、IOException {
GetBook 图书信息 = new GetBook();
for (; i < 10000; i++) {
字符串 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+“.html”;
尝试 {
bookinfo.getFromJINSHU(bookURL);
} catch (Throwable e) {
我++;
doPost(请求,响应);
}
}
}
/**
* servlet 的 doPost 方法。 <br>
*
* 当表单的标签值方法等于时调用此方法
* 邮政。
*
* @参数请求
* 客户端向服务器发送的请求
* @参数响应
* 服务器发送给客户端的响应
* @抛出ServletException
* 如果发生错误
* @抛出IOException
* 如果发生错误
*/
公共无效doPost(HttpServletRequest请求,HttpServletResponse响应)
抛出 ServletException、IOException {
GetBook 图书信息 = new GetBook();
for (; i < 10000; i++) {
字符串 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+“.html”;
尝试 {
bookinfo.getFromJINSHU(bookURL);
} catch (Throwable e) {
我++;
doGet(请求,响应);
}
}
}
/**
* servlet 的初始化。 <br>
*
* @抛出ServletException
* 如果发生错误
*/
公共无效 init() 抛出 ServletException {
// 把你的代码放在这里
}
}
众多功能的实现方法有很多,希望各位可以交流不同的思想和方法。可以加QQ412546724。呵呵