获取百度の歌曲名、歌手と链接!!
复制番号代番号次のように:
パッケージ 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 {
public String getHtmlContent(String htmlURL) {
URL URL = null;
文字列 rowContent = "";
StringBuffer htmlContent = new StringBuffer();
試す {
URL = 新しい URL(htmlURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
in.close();
} catch (MalformedURLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} キャッチ (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
戻りhtmlContent.toString();
}
public List getLink(String htmlContent) {
ArrayList listLink = new ArrayList();
文字列正規表現 = "<td[^>]*>[//(]*<a[^>]*href=(/"([^/"]*)/"|/'([^/']*) )/'|([^//s>]*))[^>]*>(.*?)[//)]*[//s]*</td>";
パターン pattern = Pattern.compile(regex, Pattern.DOTALL);
マッチャー matcher = pattern.matcher(htmlContent);
while (matcher.find()) {
listLink.add(matcher.group());
}
リストリンクを返します。
}
public List<String> getHref(String htmlContent) {
文字列正規表現。
リスト listtHref = 新しい ArrayList();
正規表現 = "href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*))/"";
パターン pa = Pattern.compile(regex, Pattern.DOTALL);
マッチャー ma = pa.matcher(htmlContent);
while (ma.find()) {
listtHref.add(ma.group().replaceFirst("href=/"", "").replace("/"",
""));
}
listtHref を返します。
}
public List<String> getPerson(String htmlContent) {
文字列正規表現。
リスト list = 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("/"", ""));
}
リストを返す;
}
public List<String> getSongName(String 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());
}
リストの人を返します。
}
public String getMainContent(String htmlContent) {
文字列正規表現 = "<table width=/"100%/" align=/"center/" cellpadding=/"0/" cellpacing=/"0/" class=/"list/">(.*?)</テーブル>";
StringBuffer mainContent = new StringBuffer();
パターン pattern = Pattern.compile(regex, Pattern.DOTALL);
マッチャー matcher = pattern.matcher(htmlContent);
while (matcher.find()) {
mainContent.append(matcher.group());
}
mainContent.toString() を返します。
}
public String outTag(final String s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbTools = 新しい DBTools();
public void getFromBaiduMap3(String htmlURL) throws Throwable {
ハッシュマップ htmlContentMap = new HashMap();
文字列 htmlContent = getHtmlContent(htmlURL);
文字列 mainContent = getMainContent(htmlContent);
リスト listLink = getLink(mainContent);
for (int j = 0; j < listLink.size(); j++) {
文字列 tdTag = listLink.get(j).toString();
リスト SongNameList = 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());
ソングパーソン = outTag(personList.get(n).toString());
}
} それ以外 {
歌の人 = "なし";
}
// System.out.print(songNameList.get(0).toString());
List hrefList = getHref(songNameList.get(0).toString());
String SongHref = hrefList.get(0).toString();
System.out.println();
String sql = "曲(曲名,曲の人,曲Href)の値(?,?,?)に挿入";
ArrayList list_values = 新しい ArrayList();
list_values.add(曲名);
list_values.add(歌の人);
list_values.add(songHref);
dbTools.update(sql, list_values);
}
}
}
DBToolsデータベース库链接类:
复制番号代番号次のように:
パッケージ dbTools;
java.util.ArrayListをインポートします。
インポート java.sql.*;
パブリック クラス DBTools {
private PreparedStatement 準備されたステートメント;
プライベート ResultSet 結果セット;
プライベート接続接続;
public DBTools() {
試す {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
試す {
接続 = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/TestURL"、"root"、"zhuyi");
} キャッチ (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
public ArrayList query(String sql, ArrayList list_values) throws Throwable {
ArrayList listRows = 新しい ArrayList();
準備されたステートメント = connection.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
prepareStatement.setObject(i + 1, list_values.get(i));
}
resultSet = prepareStatement.executeQuery();
while (resultSet.next()) {
String[] rowinfo = 新しい String[resultSet.getMetaData()
.getColumnCount()];
for (int i = 0; i < rowinfo.length; i++) {
rowinfo[i] = resultSet.getString(i + 1);
}
listRows.add(行情報);
}
listRows を返します。
}
public void update(String sql, ArrayList list_values) throws Throwable {
準備されたステートメント = connection.prepareStatement(sql);
for (int i = 0; i < list_values.size(); i++) {
prepareStatement.setObject(i + 1, list_values.get(i));
}
準備されたステートメント.executeUpdate();
準備されたステートメント.close();
}
}
サーブレット调用:
复制番号代番号次のように:
パッケージコントローラー;
インポート 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 extends HttpServlet {
/**
* オブジェクトのコンストラクター。
*/
public TestURL() {
素晴らしい();
}
/**
* サーブレットの破棄。 <br>
*/
public void destroy() {
super.destroy(); // ログに「destroy」文字列を書き込むだけです
// ここにコードを入れてください
}
/**
* サーブレットの doGet メソッド。 <br>
*
* このメソッドは、フォームのタグ値メソッドが get と等しい場合に呼び出されます。
*
* @paramリクエスト
* クライアントからサーバーに送信されるリクエスト
* @param レスポンス
* サーバーからクライアントに送信される応答
* @throws サーブレット例外
* エラーが発生した場合
* @throws 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();
}
}
/**
* サーブレットの doPost メソッド。 <br>
*
* このメソッドは、フォームのタグ値メソッドが次と等しい場合に呼び出されます。
* 役職。
*
* @paramリクエスト
* クライアントからサーバーに送信されるリクエスト
* @param レスポンス
* サーバーからクライアントに送信される応答
* @throws サーブレット例外
* エラーが発生した場合
* @throws IOException
* エラーが発生した場合
*/
public void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス)
ServletException、IOExceptionをスローします{
response.setContentType("テキスト/html");
PrintWriter 出力 = response.getWriter();
外
.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>サーブレット</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" これは ");
out.print(this.getClass());
out.println("、POST メソッドを使用");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* サーブレットの初期化。 <br>
*
* @throws サーブレット例外
※エラーが発生した場合
*/
public void 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 URL = null;
文字列 rowContent = "";
StringBuffer htmlContent = new StringBuffer();
URL = 新しい URL(htmlURL);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
in.close();
戻りhtmlContent.toString();
}
public String getBookName(String htmlContent) {
文字列 bookName = "";
文字列正規表現 = "<span class=/"style15/">[^>]*</span>";
パターン pattern = Pattern.compile(regex, Pattern.DOTALL);
マッチャー matcher = pattern.matcher(htmlContent);
if (matcher.find()) {
bookName = matcher.group();
}
本名を返します;
}
public String outTag(final String s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbtools = 新しい 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 = 新しい ArrayList();
list_values.add(書籍名);
dbtools.update(sql, list_values);
}
}
}
调用サーブレット:
复制番号代番号次のように:
パッケージコントローラー;
インポート java.io.IOException;
java.io.PrintWriterをインポートします。
インポート javax.servlet.ServletException;
インポート javax.servlet.http.HttpServlet;
インポート javax.servlet.http.HttpServletRequest;
インポート javax.servlet.http.HttpServletResponse;
webTools.GetBook をインポートします。
パブリック クラス TestBook extends HttpServlet {
/**
* オブジェクトのコンストラクター。
*/
public TestBook() {
素晴らしい();
}
/**
* サーブレットの破棄。 <br>
*/
public void destroy() {
super.destroy(); // ログに「destroy」文字列を書き込むだけです
// ここにコードを入れてください
}
/**
* サーブレットの doGet メソッド。 <br>
*
* このメソッドは、フォームのタグ値メソッドが get と等しい場合に呼び出されます。
*
* @paramリクエスト
* クライアントからサーバーに送信されるリクエスト
* @param レスポンス
* サーバーからクライアントに送信される応答
* @throws サーブレット例外
* エラーが発生した場合
* @throws IOException
* エラーが発生した場合
*/
int i = 1;
public void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス)
ServletException、IOExceptionをスローします{
GetBook bookinfo = new GetBook();
for (; i < 10000; i++) {
文字列 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html";
試す {
bookinfo.getFromJINSHU(bookURL);
} catch (Throwable e) {
i++;
doPost(リクエスト、レスポンス);
}
}
}
/**
* サーブレットの doPost メソッド。 <br>
*
* このメソッドは、フォームのタグ値メソッドが次と等しい場合に呼び出されます。
* 役職。
*
* @param リクエスト
* クライアントからサーバーに送信されるリクエスト
* @param レスポンス
* サーバーからクライアントに送信される応答
* @throws サーブレット例外
* エラーが発生した場合
* @throws IOException
* エラーが発生した場合
*/
public void doPost(HttpServletRequest リクエスト、HttpServletResponse レスポンス)
ServletException、IOExceptionをスローします{
GetBook bookinfo = new GetBook();
for (; i < 10000; i++) {
文字列 bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html";
試す {
bookinfo.getFromJINSHU(bookURL);
} catch (Throwable e) {
i++;
doGet(リクエスト, レスポンス);
}
}
}
/**
* サーブレットの初期化。 <br>
*
* @throws サーブレット例外
※エラーが発生した場合
*/
public void init() は ServletException をスローします {
// ここにコードを入れてください
}
}
各機能の実現方法は多数あり、各ビットで異なるアイデアや方法を活用できることが望まれます。