获取百度的歌曲名,歌手和链接!!
复制代码代码如下 :
package webTools ;
importer java.io.BufferedReader ;
importer java.io.IOException ;
importer java.io.InputStreamReader ;
importer java.io.UnsupportedEncodingException ;
importer java.net.MalformedURLException ;
importer java.net.URL ;
importer java.util.ArrayList ;
importer java.util.HashMap ;
importer java.util.List ;
importer java.util.regex.Matcher ;
importer java.util.regex.Pattern ;
importer dbTools.DBTools ;
classe publique IOTOWeb {
chaîne publique getHtmlContent (chaîne htmlURL) {
URL URL = nulle ;
Chaîne rowContent = "";
StringBuffer htmlContent = new StringBuffer();
essayer {
url = nouvelle URL (htmlURL);
BufferedReader dans = nouveau BufferedReader (nouveau InputStreamReader (url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
joindre();
} catch (MalformedURLException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
} catch (IOException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
return htmlContent.toString();
}
liste publique getLink (String htmlContent) {
ArrayList listLink = new ArrayList();
String regex = "<td[^>]*>[//(]*<a[^>]*href=(/"([^/"]*)/"|/'([^/']* )/'|([^//s>]*))[^>]*>(.*?)[//)]*[//s]*</td>";
Modèle de modèle = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(htmlContent);
tandis que (matcher.find()) {
listLink.add(matcher.group());
}
return listLink;
}
public List<String> getHref(String htmlContent) {
Expression régulière de chaîne ;
Liste listtHref = new ArrayList();
regex = "href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*))/"";
Modèle pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(htmlContent);
while (ma.find()) {
listtHref.add(ma.group().replaceFirst("href=/"", "").replace("/"",
""));
}
return listtHref ;
}
public List<String> getPerson(String htmlContent) {
Expression régulière de chaîne ;
Liste liste = new ArrayList();
regex = "//(<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>] *))[^>]*>(.*?)//)";
Modèle pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(htmlContent);
while (ma.find()) {
list.add(ma.group().replaceFirst("href=/"", "").replace("/"", ""));
}
liste de retour ;
}
public List<String> getSongName(String htmlContent) {
Expression régulière de chaîne ;
Liste listPerson = new ArrayList();
regex = "<a[^>]*href=(/"([^/"]*)/"|/'([^/']*)/'|([^//s>]*)) [^>]*>(.*?)</a>//s";
Modèle pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(htmlContent);
while (ma.find()) {
listPerson.add(ma.group());
}
retourner listPerson;
}
chaîne publique getMainContent(String htmlContent) {
String regex = "<table width=/"100%/" align=/"center/" cellpadding=/"0/" Cellpacing=/"0/" class=/"list/">(.*?)</ tableau>";
StringBuffer mainContent = new StringBuffer();
Modèle de modèle = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(htmlContent);
tandis que (matcher.find()) {
mainContent.append(matcher.group());
}
return mainContent.toString();
}
chaîne publique outTag (chaîne finale s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbTools = new DBTools();
public void getFromBaiduMap3(String htmlURL) lance Throwable {
HashMap htmlContentMap = new HashMap();
Chaîne htmlContent = getHtmlContent(htmlURL);
Chaîne mainContent = getMainContent(htmlContent);
Liste listLink = getLink(mainContent);
pour (int j = 0; j < listLink.size(); j++) {
String tdTag = listLink.get(j).toString();
Liste songNameList = getSongName(tdTag);
Chaîne songName = outTag(songNameList.get(0).toString());
Liste personList = getPerson(tdTag);
Chaîne chansonPerson = "" ;
if (personList.size() != 0) {
pour (int n = 0; n < personList.size(); n++) {
// System.out.println(personList.get(n).toString());
songPerson = outTag(personList.get(n).toString());
}
} autre {
songPerson = "无";
}
// System.out.print(songNameList.get(0).toString());
Liste hrefList = getHref(songNameList.get(0).toString());
Chaîne songHref = hrefList.get(0).toString();
System.out.println();
String sql = "insérer dans les valeurs de la chanson (nom de la chanson, chansonPersonne, chansonHref) (?,?,?)" ;
ArrayList list_values = new ArrayList();
list_values.add (nom de la chanson);
list_values.add(songPerson);
list_values.add(songHref);
dbTools.update(sql, list_values);
}
}
}
Description de DBTools :
复制代码代码如下 :
paquet dbTools ;
importer java.util.ArrayList ;
importer java.sql.* ;
classe publique DBTools {
private PreparedStatement PreparedStatement ;
resultSet privé resultSet ;
connexion de connexion privée ;
public DBTools() {
essayer {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
essayer {
connexion = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/TestURL", "root", "zhuyi");
} catch (SQLException e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
}
La requête publique ArrayList (String sql, ArrayList list_values) lance Throwable {
ArrayList listRows = new ArrayList();
PrepareStatement = connexion.prepareStatement(sql);
pour (int i = 0; i < list_values.size(); i++) {
PrepareStatement.setObject(i + 1, list_values.get(i));
}
resultSet = PrepareStatement.executeQuery();
while (resultSet.next()) {
String[] rowinfo = nouveau String[resultSet.getMetaData()
.getColumnCount()];
pour (int i = 0; i < rowinfo.length; i++) {
rowinfo[i] = resultSet.getString(i + 1);
}
listRows.add(rowinfo);
}
retourner listRows ;
}
public void update (String sql, ArrayList list_values) lance Throwable {
PrepareStatement = connexion.prepareStatement(sql);
pour (int i = 0; i < list_values.size(); i++) {
PrepareStatement.setObject(i + 1, list_values.get(i));
}
préparéStatement.executeUpdate();
PrepareStatement.close();
}
}
Servlet调用:
复制代码代码如下 :
contrôleur de paquet ;
importer java.io.IOException ;
importer java.io.PrintWriter ;
importer java.util.List ;
importer javax.servlet.ServletException ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
importer webTools.IOTOWeb ;
la classe publique TestURL étend HttpServlet {
/**
* Constructeur de l'objet.
*/
URL de test publique() {
super();
}
/**
* Destruction de la servlet. <br>
*/
public void destroy() {
super.destroy(); // Met simplement la chaîne "destroy" dans le journal
// Mettez votre code ici
}
/**
* La méthode doGet de la servlet. <br>
*
* Cette méthode est appelée lorsqu'un formulaire a sa méthode de valeur de balise égale à obtenir.
*
* Requête @param
* la requête envoyée par le client au serveur
* Réponse @param
* la réponse envoyée par le serveur au client
* @throws ServletException
* si une erreur s'est produite
* @throws IOException
* si une erreur s'est produite
*/
public void doGet (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
essayer {
IOTOWeb iotoWeb = nouveau IOTOWeb();
iotoWeb.getFromBaiduMap3("http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2");
} attraper (jetable e) {
// TODO Bloc catch généré automatiquement
e.printStackTrace();
}
}
/**
* La méthode doPost de la servlet. <br>
*
* Cette méthode est appelée lorsqu'un formulaire a sa méthode de valeur de balise égale à
* poste.
*
* Requête @param
* la requête envoyée par le client au serveur
* Réponse @param
* la réponse envoyée par le serveur au client
* @throws ServletException
* si une erreur s'est produite
* @throws IOException
* si une erreur s'est produite
*/
public void doPost (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
réponse.setContentType("text/html");
PrintWriter out = réponse.getWriter();
dehors
.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>Une servlet</TITLE></HEAD>");
out.println(" <CORPS>");
out.print(" C'est ");
out.print(this.getClass());
out.println(", en utilisant la méthode POST");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* Initialisation de la servlet. <br>
*
* @throws ServletException
* si une erreur survient
*/
public void init() lance ServletException {
// Mettez votre code ici
}
}
获取金书网的图书名:
复制代码代码如下 :
paquet webTools ;
importer java.io.BufferedReader ;
importer java.io.InputStreamReader ;
importer java.net.URL ;
importer java.util.ArrayList ;
importer java.util.List ;
importer java.util.regex.Matcher ;
importer java.util.regex.Pattern ;
importer dbTools.DBTools ;
classe publique GetBook {
public String getHtmlContent(String htmlURL) lance Throwable {
URL URL = nulle ;
Chaîne rowContent = "";
StringBuffer htmlContent = new StringBuffer();
url = nouvelle URL (htmlURL);
BufferedReader dans = nouveau BufferedReader (nouveau InputStreamReader (url
.openStream(), "gb2312"));
while ((rowContent = in.readLine()) != null) {
htmlContent.append(rowContent);
}
joindre();
return htmlContent.toString();
}
chaîne publique getBookName (chaîne htmlContent) {
Chaîne nom du livre = "" ;
String regex = "<span class=/"style15/">[^>]*</span>" ;
Modèle de modèle = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(htmlContent);
si (matcher.find()) {
bookName = matcher.group();
}
retourner le nom du livre ;
}
chaîne publique outTag (chaîne finale s) {
return s.replaceAll("<.*?>", "");
}
DBTools dbtools = new DBTools();
public void getFromJINSHU(String htmlURL) lance Throwable {
Chaîne htmlContent = getHtmlContent(htmlURL);
Chaîne bookName = outTag(getBookName(htmlContent));
if (bookName != null && !"".equals(bookName)) {
System.out.println(bookName);
String sql = "insérer dans les valeurs bookinfo (bookName) (?)" ;
ArrayList list_values = new ArrayList();
list_values.add(bookName);
dbtools.update(sql, list_values);
}
}
}
Description du Servlet :
复制代码代码如下 :
contrôleur de paquet ;
importer java.io.IOException ;
importer java.io.PrintWriter ;
importer javax.servlet.ServletException ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
importer webTools.GetBook ;
la classe publique TestBook étend HttpServlet {
/**
* Constructeur de l'objet.
*/
Livre de Test public() {
super();
}
/**
* Destruction de la servlet. <br>
*/
public void destroy() {
super.destroy(); // Met simplement la chaîne "destroy" dans le journal
// Mettez votre code ici
}
/**
* La méthode doGet de la servlet. <br>
*
* Cette méthode est appelée lorsqu'un formulaire a sa méthode de valeur de balise égale à obtenir.
*
* Requête @param
* la requête envoyée par le client au serveur
* Réponse @param
* la réponse envoyée par le serveur au client
* @throws ServletException
* si une erreur s'est produite
* @throws IOException
* si une erreur s'est produite
*/
int je = 1;
public void doGet (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
GetBook bookinfo = new GetBook();
pour (; je < 10000; je++) {
Chaîne bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html" ;
essayer {
bookinfo.getFromJINSHU(bookURL);
} attraper (jetable e) {
je++;
doPost (demande, réponse);
}
}
}
/**
* La méthode doPost de la servlet. <br>
*
* Cette méthode est appelée lorsqu'un formulaire a sa méthode de valeur de balise égale à
* poste.
*
* Requête @param
* la requête envoyée par le client au serveur
* Réponse @param
* la réponse envoyée par le serveur au client
* @throws ServletException
* si une erreur s'est produite
* @throws IOException
* si une erreur s'est produite
*/
public void doPost (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
GetBook bookinfo = new GetBook();
pour (; je < 10000; je++) {
Chaîne bookURL = "http://www.golden-book.com/booksinfo/12/" + i
+ ".html" ;
essayer {
bookinfo.getFromJINSHU(bookURL);
} attraper (jetable e) {
je++;
doGet(demande, réponse);
}
}
}
/**
* Initialisation de la servlet. <br>
*
* @throws ServletException
* si une erreur survient
*/
public void init() lance ServletException {
// Mettez votre code ici
}
}
每种功能的实现方法有很多,希望各位可以交流不同的思想和方法。可以加QQ412546724。呵呵