獲得百度的歌曲名、歌手和連結!
複製程式碼如下:
打包 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 {
// 把你的程式碼放在這裡
}
}
眾多功能的實作方法很多,希望各位可以交流不同的想法和方法。